2016-04-09 9 views
0

私はJSのOOPの初心者です。今はインスタンスで変数を呼び出そうとしていますが、関数内でどのように呼び出すことができますか?JavaScriptオブジェクトの機能setTimeoutのアクセス変数

var foo = function() { 

    this.a = 1; // how can I call 'a' in the setTimeout() function 

    this.start = function(i) { 
     if (i<3){ 
      window.setTimeout(function() { 

       console.log(a); // this line shows undefined 
       console.log(this.a);  // this line indicates 'this' is window 

       i++; 
       start(i); // this one does not work as well 

      }, 2000); 
     } 
    }; 
}; 

var bar = new foo(); 
bar.start(0); 

答えて

0

だけで機能する前に、変数にthisを格納します。

また
var foo = function() { 

    this.a = 1; // how can I call 'a' in the setTimeout() function 

    this.start = function(i) { 
     var that = this; 
     if (i<3){ 
      window.setTimeout(function() { 

       console.log(that.a);  

       i++; 
       that.start(i); // this one does not work as well 

      }, 2000); 
     } 
    }; 
}; 

var bar = new foo(); 
bar.start(0); 

、あなたのプロジェクトの要件に応じて、ES6の新しいarrow functionsを使用することができます。

window.setTimeout(() => { 

    console.log(this.a);  

    i++; 
    this.start(i); // this one does not work as well 
}, 2000); 
+0

ありがとうございました!それは私のために完全に動作します! –

関連する問題