问题
使用对象文字而不是自实例化的构造函数是否有性能优势?
例子
对象字面量:
var foo = {
//...
};
自实例化构造函数:
var foo = new function () {
//...
};
使用对象文字而不是自实例化的构造函数是否有性能优势?
对象字面量:
var foo = {
//...
};
自实例化构造函数:
var foo = new function () {
//...
};
是的(对象字面量会更快),但它们在实现1中略有不同,代表不同的目标。构造函数形式“必须做更多的事情”,而文字形式也可以进行更高程度的优化——它是一个定义(一组尚未修复的属性),而不是一系列语句。
即使一个微基准(这很有趣,感谢 Arun!)可能会显示一个“慢得多”,但它在实际程序2中并不重要,因为在任一构造中花费的相对时间量几乎没有。
1当使用构造函数时,必须引入原型。由于对象文字的固定链行为,因此不是这种情况。
构造函数创建的每个对象都有一个对其构造函数的“原型”属性值的隐式引用(称为对象的原型)。
其他开销工作包括创建新的执行上下文、复制其他属性,甚至检查返回值。(在发布的情况下,它还必须创建一个新的一次性函数对象,然后才能将其用作构造函数,这本身会增加一些额外的开销)。
2我敢肯定有反例。但是对于这种情况,我只能希望问题已经被彻底地确定并消除了所有其他瓶颈。