如果我有以下代码:
var obj = {
x: 34,
init: function() {
alert(this.x);
alert(obj.x)
}
};
两个警报都显示 34。但是有什么区别,一个比另一个更好吗?
http://jsfiddle.net/4scz435q/
我在jsperf中做了测试,看来this
有点快,但我仍然不明白这两个版本的内部工作原理。http://jsperf.com/name-vs-this-in-obj
除了前面答案中提到的阴影等之外,使用this
更通用,因此在某些情况下会更有效。让我举例说明。
var object = {
name: 'John Doe',
print: function () {
console.log(object.name);
}
};
var anotherObject = Object.create(object);
object.print(); // John Doe
anotherObject.print(); // John Doe
anotherObject.name = 'Jane Doe';
console.log(anotherObject.name); // Jane Doe
anotherObject.print(); // John Doe
我在这里所做的是创建一个object
其名称为“John Doe”,然后我创建anotherObject
继承自它。现在在这种情况下,您会期望anotherObject.print()
打印自己的名字。但事实并非如此。
这是因为您的函数与该特定对象相关联。如果我会用this
相反,它会适当地引用新对象。
另外,想象一下如果我这样做会发生什么。
delete object.name;
anotherObject.print() // Error!
http://jsfiddle.net/uxy08zxz/
这是因为即使您认为它与先前的对象无关,但它的功能仍然引用该属性。不是吗?
因此,保持通用。使用this
。我说,让你的代码更加干燥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)