Javascript setInterval-我可以让它识别吗;这";

Javascript setInterval-我可以让它识别吗;这";,javascript,Javascript,我甚至不知道该如何问这个问题,但我已将代码缩减为最简单的示例: function Handler() {} Handler.prototype.texts = []; Handler.prototype.add = function(d) { this.texts.push(d); }; Handler.prototype.tick = function() { console.log( this.texts ); }; var x = new Handler(); setInterv

我甚至不知道该如何问这个问题,但我已将代码缩减为最简单的示例:

function Handler() {}
Handler.prototype.texts = [];
Handler.prototype.add = function(d) {
  this.texts.push(d);
};
Handler.prototype.tick = function() {
  console.log( this.texts );
};

var x = new Handler();
setInterval( x.tick, 5000 );

x.add('beatles');
当setInterval调用x.tick时,它会为this.texts(当然还有
this
)提供一个未定义的值。而我可以通过

setInterval( x.tick, 5000, x );

// and ... in the prototype
Handler.prototype.tick = function(myObj) {
    console.log( myObj.texts );
}

感觉有点笨重。有更好的方法吗?

x
设置为这样的上限值

setInterval(function(){
  x.tick()
}, 5000);

当启动
setInterval
时,将围绕
x
的实例创建一个闭包,并将
x
设置为这样的向上值

setInterval(function(){
  x.tick()
}, 5000);

当触发
setInterval
时,将围绕
x

的实例创建一个闭包。使用
函数.prototype.bind

setInterval( x.tick.bind(x), 5000 );
还有一些工作垫片可以支持较旧的浏览器:
使用
函数.原型.绑定

setInterval( x.tick.bind(x), 5000 );
还有一些工作垫片可以支持较旧的浏览器:

需要注意的是,这只适用于现代浏览器;)这是针对node的,所以不太担心浏览器。与上面的方法相比,我更喜欢这种方法,似乎是为此而定制的。需要注意的是,这种方法只适用于现代浏览器;)这是针对node的,所以不太担心浏览器。我更喜欢这个方法,而不是上面的方法,似乎是为这个定制的。