gpt4 book ai didi

javascript - 使用命名空间时出现意外的 "this"值

转载 作者:行者123 更新时间:2023-12-02 16:15:55 25 4
gpt4 key购买 nike

我似乎遇到了一些关于 this 的问题。当用于 JavaScript 中的命名空间时。具体来说,每当我通过 setTimeout 调用命名空间函数时或setInterval我似乎不再使用正确的值 this .

例如,考虑以下代码:

var myNamespace = {
myVar: 123,

foo: function () {
console.log('Inside foo');
console.log('this.myVar = ' + this.myVar);
console.log('myNamespace.myVar = ' + myNamespace.myVar);

// This works excactly as expected, it prints 123 and 123
this.bar();

// This does not, it prints undefined and 123
setTimeout(this.bar, 250);
},

bar: function () {
console.log('Inside bar');
console.log('this.myVar = ' + this.myVar);
console.log('myNamespace.myVar = ' + myNamespace.myVar);
}
}

myNamespace.foo();

何时 bar直接从 foo 调用一切都按我的预期进行:它打印 123123 .
然而,当 barsetTimeout 调用,它打印 undefined123 .

看来是第二种方式bar称为 this 的值这不是我所期望的。我预计它是 myNamespace但它似乎是 window .

<小时/>

这让我想到两个问题:

  1. 有没有办法保留 this bar 内的值总是指向myNamespace不管它是从哪里调用的?
  2. 硬编码 myNamespace. 会更合适吗?代替this. bar里面?

最佳答案

那是因为 this 根据范围而变化,一种方法是绑定(bind)匿名函数:

setTimeout(function(){this.bar()}.bind(this), 250);

关于javascript - 使用命名空间时出现意外的 "this"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29611389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com