首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中引用具有数值的对象属性

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

Stack Overflow用户
提问于 2013-05-16 15:47:17
回答 1查看 106关注 0票数 1

我遇到了一个看起来有点奇怪的问题。假设我有一个JavaScript对象,如下所示:

代码语言: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进行演示。单击“start”启动计时器并更新值。正如您所看到的,使用parseInt也没有什么帮助。

我已经在火狐、Chrome和IE10上测试过了。它们都表现出相同的行为。

为什么不能使用this从一个带有函数值的属性中引用一个带有数值的属性呢?为什么它可以处理非数字值?这是一个bug,还是有意为之?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-16 15:54:52

setTimeoutwindow上下文中运行该函数,因此其中的this引用window。如果您bind正确的this上下文,那么它将工作得很好:

代码语言:javascript
复制
interval = setInterval(Object.Update.bind(Object), 1000);
                                     -----^------

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

bind只能在现代浏览器中工作,所以如果您需要支持旧的IE,请使用匿名函数:

代码语言:javascript
复制
interval = setInterval(function(){ Object.Update(); }, 1000);

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16581730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档