Javascript忘记了this.something变量

时间:2014-01-21 16:39:22

标签: javascript object this intervals

我在JavaScript类(函数)中使用变量this.foo和函数this.bar(),this.bar()我在间隔中调用但是有一个小问题,JavaScript忘记了this.foo而我无法使用它。 foo in this.bar()。为什么呢?

function Somethink(element) {
    this.foo = element;

    this.bar = function () {
            // And now this.foo is undefined
    }

    setInterval(this.bar, 1000)
}

5 个答案:

答案 0 :(得分:4)

这是因为setInterval在全局对象的上下文中调用this.bar,而不是在当前对象的上下文中。尝试以这种方式调用它:

var self = this;
setInterval(function () { self.bar() }, 1000);

<强>更新 正如评论中指出的那样,另一种选择是使用bind()

setInterval(this.bar.bind(this), 1000);

答案 1 :(得分:3)

因为this是间隔运行时的窗口范围。您需要使用闭包或bind()

window.setInterval(this.bar.bind(this), 1000);

答案 2 :(得分:1)

function Somethink(element) {
    var foo = element;

    var bar = function () {

    }

setInterval(bar, 1000)
}

改用变量。 '这'根据你所说的地方改变背景

答案 3 :(得分:0)

行为是正确的。在调用bar()时,this可能会发生任何事情。通常的解决方法是将this分配给局部变量:

function Somethink(element) {
    var that = this; // trick
    that.foo = element;

    that.bar = function () {
            // Use "that" in here
    }

    setInterval(that.bar, 1000)
}

that将确保代码保留对this原始值的引用。

答案 4 :(得分:-1)

你可以这样做:

function Somethink(element) {
    this.foo = element;

    this.bar = function () {
        // And now this.foo is undefined
    }
    var self = this

    setInterval(self.bar, 1000)
 }