2016-11-26 60 views
1

如何使用setInterval和構造函數的方法。 console.log顯示未定義。任何人都可以解釋爲什麼以及如何從setInterval訪問構造函數的變量。如何使用setInterval和構造函數?

var aa=new test(); 
var bb; 
window.onload= function(){ 
    bb=setInterval(aa.b,1000); 
} 
function test(){ 
    this.a=1; 
    this.b=function(){ 
     console.log(this.a); 
    } 
} 

回答

2

嘗試在這樣的函數進行包裝:

setInterval(() => aa.b(), 1000); 

的原因,你的方式不起作用的是,你通過B功能的setInterval的,但隨後失去了它的this參考,所以this成爲全局窗口對象,並且window.a未定義。

當您調用aa對象上的函數時,將其包裝爲函數使thisaa

如果你不想換另外一個函數的功能,您還可以使用bind

setInterval(aa.b.bind(aa), 1000); 

這裏this被強制爲aa

+0

哦COM」上! :)我回答了關於「綁定版本」只在你之前:) –

+0

錯過了。爲你+1 –

1

其他是正確的 - 在this指的不是test實例了,一個更簡單的方法來解決(正確),這是用一個新的變量:

var aa=new test(); 
var bb; 
window.onload= function(){ 
    bb=setInterval(aa.b,1000); 
} 
function test(){ 
    var self = this; //keep the right 'this'. 
    this.a=1; 
    this.b=function(){ 
     console.log(self.a); //changed, `self` instead of `this` 
    } 
}