setInterval - 我可以让它识别“this”

时间:2012-08-20 20:50:24

标签: 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();
setInterval( x.tick, 5000 );

x.add('beatles');

当setInterval调用x.tick时,它为this.texts提供undefined值 - 当然,还为this。虽然我可以通过

解决问题
setInterval( x.tick, 5000, x );

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

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

2 个答案:

答案 0 :(得分:5)

使x像这样的升值值

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

setInterval触发时,将围绕x的实例创建一个闭包。

答案 1 :(得分:3)

使用Function.prototype.bind

setInterval( x.tick.bind(x), 5000 );

还有工作垫片支持旧版浏览器: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind