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 の値が与えられます。もちろん、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 に答える