繁体   English   中英

JavaScript忘记了this.something变量

[英]Javascript forgets this.something variable

我在JavaScript类(函数)中具有变量this.foo和函数this.bar(),this.bar(),但我有一个小问题,JavaScript忘记了this.foo,在此我无法使用this.foo 。酒吧()。 为什么?

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

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

    setInterval(this.bar, 1000)
}

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

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

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

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

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

window.setInterval(this.bar.bind(this), 1000);
function Somethink(element) {
    var foo = element;

    var bar = function () {

    }

setInterval(bar, 1000)
}

请改用变量。 “此”会根据您在哪里调用来更改上下文

行为是正确的。 在当时间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的原始值的引用。

您可以这样:

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

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

    setInterval(self.bar, 1000)
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM