1

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

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 的值——当然还有 for this。虽然我可以通过

setInterval( x.tick, 5000, x );

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

感觉有点笨拙。有一个更好的方法吗?

4

2 回答 2

5

x像这样进行升值

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

触发时setInterval,将围绕x.

于 2012-08-20T20:51:50.970 回答
3

采用Function.prototype.bind

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

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

于 2012-08-20T20:52:02.240 回答