与自实例化构造函数相比,使用对象文字是否具有性能优势

Is there a performance advantage in using an object literal over a self instantiated constructor?

本文关键字:是否 文字 性能 对象 构造函数 实例化      更新时间:2023-09-26

问题

与自实例化构造函数相比,使用对象文字有性能优势吗?

示例

对象文字:

var foo = { 
    //... 
};

自实例化构造函数:

var foo = new function () {
    //...
};

是的(对象文字会更快),但它们在实现1时有细微的不同,代表不同的目标。构造函数形式"必须做更多的事情",而字面形式也可以进行更高度的优化——它是一个定义(一组尚未固定的属性),而不是一系列语句。

尽管微基准(这很有趣,感谢Arun!)可能会显示一个"慢得多",但在实际程序中这并不重要,因为在两个结构中花费的相对时间几乎都没有。


1当使用构造函数时,必须引入原型。对象文字的情况并非如此,因为它的固定链行为。

构造函数创建的每个对象都有一个对其构造函数"prototype"属性值的隐式引用(称为对象的原型)。

其他开销工作包括创建新的执行上下文、复制附加属性,甚至检查返回值。(在发布的案例中,它还必须创建一个新的一次性函数对象,然后才能将其用作构造函数,这本身就增加了一些额外的开销)。

2我相信还有反例。但对于这种情况,我只能希望这个问题已经得到彻底的基准测试,并确定和消除了所有其他瓶颈。