Prototype 类中未定义的 DOM 元素

Undefined DOM element in Prototype Class

提问人:Leo Tsang 提问时间:6/18/2020 最后编辑:CommunityLeo Tsang 更新时间:6/18/2020 访问量:199

问:

我的目标是有一个按钮,当单击该按钮时,它将创建一个闪烁的对象,方法是使用切换和设置超时,然后将该对象附加到 HTML 上。但是,我在 Javascript 代码中收到“无法读取未定义的属性'切换'”错误消息。

用于创建对象的 JS

var MakeSquare = function (top, left, time) {
    this.time = time;
    this.$node = $('<span class="square"></span>');
    this.setPosition(top, left);
    this.repeat();
}

// this function will set the position of the <span> on the webpage
MakeSquare.prototype.setPosition = function (top, left) {
  var styleSettings = {
    top: top,
    left: left
  };
  this.$node.css(styleSettings);
};

// this function will toggle the <span> off, and invoke the repeat function to turn it back on again, and so forth.
MakeSquare.prototype.step = function() {
  this.$node.toggle();
  this.repeat();
}

MakeSquare.prototype.repeat = function () {
  setTimeout(this.step, this.time)
}
javascript 这个 原型

评论

0赞 FZs 6/18/2020
这回答了你的问题吗?如何在回调中访问正确的“this”?
0赞 Leo Tsang 6/19/2020
刚刚尝试过这个,是的,它现在可以工作了。非常感谢!

答:

1赞 TeWu 6/18/2020 #1

这是丢失上下文时出现的标准问题。this

尝试使用,链接这个:bind

MakeSquare.prototype.repeat = function () {
  setTimeout(this.step.bind(this), this.time)
}

有关详细信息,请参阅此问题和答案。