我甚至不确定如何提出这个问题,但我已经将代码减少到最简单的可能示例:
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 );
}
感觉有点笨重。有更好的方法吗?
答案 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