我的小脚本有问题。
function test() {
this.arr = new Array('a','b','c');
this.func = function() {
//Do something with this.arr. But it's undefined.. WHY???
}
this.Start = function() {
this.Interval = setInterval(this.func, 1000);
}
}
var Test = new test();
Test.Start();
当我尝试在“func”中对数组做任何事情时,它一直告诉我,数组是未定义的。为什么呢?
答案 0 :(得分:1)
你得到了错误的this
引用,请尝试:
function Test() {
this.arr = new Array('a','b','c');
this.func = function() {
console.log(this.arr);
};
this.start = function() {
var fun = this.func.bind(this);
this.interval = setInterval(fun, 1000);
};
}
var test = new Test();
test.start();
如果您需要更多信息,那么关于this
的文章非常有趣:Function invocation and this
另外,请注意我已经改变了一些符号的情况。请记住,用作构造函数的函数以大写字母开头,变量和方法使用小写字母。
答案 1 :(得分:1)
在全局范围内调用定时器/间隔,因此'this'设置为'window'。要解决此问题,您可以将第三个选项传递给setInterval(),该选项将用作指定函数调用的参数。
function Test(){
this.array = new Array('a','b','c');
this.function = funct(){ }
this.start = function(){
this.Interval = setInterval(function(passedObj){
passedObj.funct.call(passedObj);
},1000,this);
}
}
var testObj = new Test();
testObj.start();
阅读下面的评论,您将看到这是针对nodejs的。但是,这对IE8和/或更早版本不起作用。