如何使用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);
}
}
答案 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)
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
setInterval(aa.b.bind(aa),1000);
答案 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}}