javascript - 我想我误解了 JavaScript 中的 "this"

标签 javascript

我有以下代码,应该每秒显示一次递增的数字:

    let timer_demo = {
        count: 0,
        timer: null,
        update: function() {
            this.count++;
            console.log(this.count);
            this.timer = setTimeout(this.update, 1000);
        }
    };
    timer_demo.update();

但是,当我在 Chrome 中运行它时,我得到一个“1”,然后在一秒钟后得到一个“NaN”,然后什么也没有。计时器停止。我觉得问题在于我不理解在这种情况下“这个”是怎么回事。我只是不知道那是什么。第二次调用“update()”方法时,“count”字段为“NaN”这一事实似乎支持了这一断言。任何人都可以为我阐明这一点吗?

谢谢!

最佳答案

函数 setTimeout 不调用 this.update,而是获取更新函数的副本并重复它。不幸的是,它失去了与原始“this”的绑定(bind)。

要解决此问题,您可以执行以下操作:

let timer_demo = {
        count: 0,
        timer: null,
        update: function() {
            this.count++;
            console.log(this.count);
            this.timer = setTimeout(this.update.bind(this), 1000);
        }
    };
timer_demo.update();

这确保函数副本绑定(bind)到this

关于javascript - 我想我误解了 JavaScript 中的 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45891530/

相关文章:

javascript - 如何使用 Winston 3 记录完整的堆栈跟踪?

javascript - D3Tip 尖端放置不一致

javascript - 可以覆盖回调中使用的方法吗?

javascript - 键盘不活动 x 英里秒后自动提交表单

javascript - 在javascript中计算其范围内的年龄

javascript - foreach内的foreach,两张表,Knockout.js

javascript - 组成长度为 N 的字符串的最有效方法是什么,其中从 a-f、0-9 中选择随机字符

javascript - 如何在不同位置渲染指令内的内容

javascript - 如何让 TextMate 在编译时看到 CoffeeScript 中的 "require"表达式?

javascript - 组合日期格式变量和函数 (jquery/Javascript)