设置间隔后变量未定义

Variable undefined after setting interval

我想知道为什么我的变量最初设置为一个值,当从 interval.

访问时变成 undefined

考虑以下 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的值在Init函数中设置为1,当Action 函数被第一次调用。

但是,当从 interval TEST.ITV 第二次和所有其他时间调用此函数时,TEST.DIRundefined,我不明白为什么。

另请参阅此 FIDDLE

有人可以向我解释我做错了什么或忽略了什么吗?

谢谢!

那是因为'this'指的是你设置区间中的window,所以它是未定义的(没有window.DIR)

很多人对 'this' 关键字有疑问,检查 MDN docs out

this.Action 作为函数 w/o 传递给 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();
});

http://jsfiddle.net/h44y81Lu/4/