0

オブジェクトがあるとしましょう:

var myObj = function {
this.count = 0;
}

myObj.prototype {
   setCount : function() {
       var interval = setInterval(function() {
           this.count++;
       }, 500);
   }
}

問題は、カウントがsetInterval内で常に未定義であるため、myObj内のカウント変数を0以外にインクリメントすることはできないことです。

4

2 に答える 2

3

this呼び出される関数(および関数の呼び出し方法)に応じて変化します。

渡す匿名関数setIntervalは別の関数です。

最初に値を非魔法変数にコピーします。

   setCount : function() {
       var that = this;
       var interval = setInterval(function() {
           that.count++;
       }, 500);

ドキュメントthis問題を参照してください。

于 2012-07-16T13:29:02.430 に答える
0

setInterval()ブラウザウィンドウのスコープ内で実行されるため、どちらが存在しないかをthis.count参照します。window.count

于 2012-07-16T13:30:26.967 に答える