我想知道为什么我的变量(最初设置为某个值)在从undefined
访问时变为interval
。
考虑以下 JQuery :
var TEST = {
DIR: null,
ITV: null,
Init: function () {
this.DIR = 1;
this.Action();
},
Action: function () {
console.log(this.DIR);
if (this.ITV == null)
this.ITV = setInterval(this.Action, 1000);
}
}
$(document).ready(function () {
TEST.Init();
});
此代码的输出如下:
1
undefined
我理解1
,因为TEST.DIR
的值在1
函数中设置为Init
,当Action
函数时它仍然是interval TEST.ITV
是第一次被召唤。
但是,当从TEST.DIR
调用第二个和所有其他时间来调用此函数时,undefined
为{{1}},我不明白为什么。
另请参阅此 FIDDLE 。
有人可以向我解释我做错了什么或者我在忽视什么?
谢谢!
答案 0 :(得分:2)
this.Action
作为其上下文的函数传递给setInterval
,因此this
不再指向TEST
的实例,但默认为window
}。试试这样:
var TEST = {
DIR: null,
ITV: null,
Init: function () {
this.DIR = 1;
this.Action();
},
Action: function () {
console.log(this.DIR);
if (this.ITV == null)
this.ITV = setInterval(function() {TEST.Action() }, 1000);
}
}
$(document).ready(function () {
TEST.Init();
});
答案 1 :(得分:1)
多数民众赞成因为'this'指的是你设定间隔中的窗口,这就是为什么它的未定义(没有window.DIR)
很多人都对'this'关键字有疑问,请查看MDN docs out