-1

(设置属性值)与:

var obj = {
    getData: function ()
    {
        this.age = 34      //notice this
    }
}
obj.getData();
alert(obj.age) //34

对比

var obj = {
    getData: function ()
    {
        obj.age = 34     //notice obj
    }
}
obj.getData();
alert(obj.age) //34

我应该什么时候使用每个?

4

2 回答 2

6

前者是(恕我直言)强烈首选,尽管在这些有限的情况下两者都“工作”。

在任何可能的情况下,一个对象都不应该通过它在声明中给出的名称来引用它自己。

Usingthis确保如果对象被分配了另一个别名并被obj重新使用,该对象仍然正确地引用它自己。同样,如果您决定重命名obj- 您只需更改一次。

于 2013-02-04T16:13:10.063 回答
1

这样做:

getData: function ()
{
    this.age = 34      //notice this
}

具有以下优点:

  1. 如果您需要重命名obj为其他名称,您的函数不必更改,因为它们将对象称为this.

  2. 它更便携;如果您在其他地方需要相同的功能,在另一个对象中,复制/粘贴会更容易。

关于点击处理程序

话虽如此,当您的代码在点击处理程序中使用时必须小心。例如:

var obj = {
    value: 'hello world',
    doSomething: function ()
    {
        alert(this.value);
    }
}

// find first <div> on the page and attach click handler
var firstDiv = document.getElementsByTagName('div')[0];
firstDiv.addEventListener('click', obj.doSomething, false);

单击时<div>,它将调用obj.doSomething,但this现在引用该window对象,这是意外的,您的代码将警告“未定义”。

要修复它,您需要编写一个辅助函数:

firstDiv.addEventListener('click', function() {
    obj.doSomething();
}, false);
于 2013-02-04T16:15:05.253 回答