在自我实例化的构造函数中使用对象文字是否有性能优势?
对象文字:
var foo = {
//...
};
自我实例化的构造函数:
var foo = new function () {
//...
};
答案 0 :(得分:10)
是(对象文字将更快),但它们在实现 1 中略有不同,并代表不同的目标。构造函数形式“必须做更多的东西”,而文字形式也可以更高度优化 - 它是一个定义(一个尚未修复的属性集),而不是一系列语句。 / p>
即使micro-benchmark(这很有趣,感谢Arun!)可能会显示一个“慢得多”,但它在实际程序 2 中的重要性并不重要在任何一个构造中花费的相对时间都没有接近。
1 使用构造函数时a prototype must be introduced。由于它是固定的链行为,因此对象文字不是这种情况。
构造函数创建的每个对象都有一个隐式引用(称为对象的原型)到其构造函数的“prototype”属性的值。
其他开销工作包括创建新的执行上下文,复制其他属性,甚至检查返回值。 (在发布的情况下,它还必须创建一个 new 一次性函数对象,然后才能使用它作为构造函数,它本身会添加一些additional overhead)。
2 我确信有反例。但是对于这种情况,我只能希望问题已经完全与已识别和删除的所有其他瓶颈进行基准测试。