2016-11-26 83 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` 
    } 
}