(设置属性值)与:
之间是否有任何区别?var obj = {
getData: function ()
{
this.age = 34 //notice this
}
}
obj.getData();
alert(obj.age) //34
VS
var obj = {
getData: function ()
{
obj.age = 34 //notice obj
}
}
obj.getData();
alert(obj.age) //34
我什么时候应该使用它们?
答案 0 :(得分:6)
前者是(恕我直言)强烈偏好,尽管两者都是"工作"在这些有限的情况下。
只要有可能,对象就不应该通过其声明中给出的名称来引用自己。
使用this
可确保在为对象分配另一个别名并重新使用obj
时,该对象仍然正确引用自身。同样,如果您决定重命名obj
- 您只需更改一次。
答案 1 :(得分:1)
这样做:
getData: function ()
{
this.age = 34 //notice this
}
具有以下优点:
如果您需要将obj
重命名为其他内容,则您的功能无需更改,因为它们将对象称为this
。
它更便携;如果您在其他地方需要相同的功能,则可以更容易地复制/粘贴。
关于点击处理程序
话虽如此,当你的代码被用于点击处理程序时,必须小心。例如:
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);