gpt4 book ai didi

javascript - 在 JavaScript 中引用具有数值的对象属性

转载 作者:行者123 更新时间:2023-11-30 18:02:33 27 4
gpt4 key购买 nike

我遇到了一个 - 看起来 - 有点奇怪的问题。假设我有一个像这样的 JavaScript 对象:

var Object = {
Property1: 0,
Property2: 1,
TxtProperty: "Sample text",

Update: function () {
this.Property1++; // Doesn't work
Object.Property2++; // Does work
this.TxtProperty = "Hello world"; // Does work

$('#prop-1').text(this.Property1); // Prints NaN
$('#prop-2').text(Object.Property2); // Prints correct value
$('#txt-prop').text(this.TxtProperty); // Prints correct value
}
};

See this fiddle进行演示。单击“开始”以启动计时器并更新值。如您所见,使用 parseInt 也没有帮助。

我已经在 Firefox、Chrome 和 IE10 中对此进行了测试。它们都表现出相同的行为。

为什么不能使用 this 从另一个具有函数值的属性中引用具有数值的属性?为什么它适用于非数值?这是错误还是有意为之?

这不是真正的问题,因为我们可以简单地使用父对象的名称来更新数值,但我只是想知道为什么会这样。

最佳答案

setTimeoutwindow 上下文中运行该函数,因此其中的 this 指的是 window。如果您 bind 正确的 this 上下文,那么它将正常工作:

interval = setInterval(Object.Update.bind(Object), 1000);
-----^------

演示:http://jsfiddle.net/wC2uM/2/

bind 仅适用于现代浏览器,因此如果您需要支持旧版 IE,请使用匿名函数:

interval = setInterval(function(){ Object.Update(); }, 1000);

请记住,在 JavaScript 中,this 取决于您调用 函数的方式;它是可变的。

关于javascript - 在 JavaScript 中引用具有数值的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16581730/

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