如何使用setInterval和构造函数?

时间:2016-11-26 14:29:57

标签: javascript jquery

如何使用setInterval和构造函数的方法。 console.log显示未定义。任何人都可以解释为什么以及如何从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);
    }
}

3 个答案:

答案 0 :(得分:3)

尝试将其包装在这样的函数中:

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

你的方式不起作用的原因是你将b函数传递给setInterval,但它失去了它的this引用,所以this成为全局窗口对象,window.a未定义。

在函数中包装它会使this成为aa,同时调用aa对象上的函数。

如果您不想将您的功能包装在另一个功能中,您还可以使用bind

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

此处this被强制为aa

答案 1 :(得分:1)

答案 2 :(得分:1)

其他正确 - 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` } } 实例,更容易修复(正确)这是使用新变量:

{{1}}