与自实例化构造函数相比,使用对象文字是否具有性能优势
Is there a performance advantage in using an object literal over a self instantiated constructor?
问题
与自实例化构造函数相比,使用对象文字有性能优势吗?
示例
对象文字:
var foo = {
//...
};
自实例化构造函数:
var foo = new function () {
//...
};
是的(对象文字会更快),但它们在实现1时有细微的不同,代表不同的目标。构造函数形式"必须做更多的事情",而字面形式也可以进行更高度的优化——它是一个定义(一组尚未固定的属性),而不是一系列语句。
尽管微基准(这很有趣,感谢Arun!)可能会显示一个"慢得多",但在实际程序中这并不重要,因为在两个结构中花费的相对时间几乎都没有。
1当使用构造函数时,必须引入原型。对象文字的情况并非如此,因为它的固定链行为。
构造函数创建的每个对象都有一个对其构造函数"prototype"属性值的隐式引用(称为对象的原型)。
其他开销工作包括创建新的执行上下文、复制附加属性,甚至检查返回值。(在发布的案例中,它还必须创建一个新的一次性函数对象,然后才能将其用作构造函数,这本身就增加了一些额外的开销)。
2我相信还有反例。但对于这种情况,我只能希望这个问题已经得到彻底的基准测试,并确定和消除了所有其他瓶颈。
相关文章:
- 访问布局信息是否也会导致浏览器重排
- ES6 模板文字是否比 eval 更安全
- 是否可以将字符串转换为文字对象数组
- 如何检查文字对象是否在 Javascript 数组中
- 在JavaScript源代码中使用UTF-8字符文字是否安全
- 是否可以在 JavaScript 对象文字表示法中创建只读成员
- 是否可以在 javascript 中的对象文字上定义函数属性
- JavaScript 中是否有 Set 文字
- Array.prototype.some() 是否返回文字?如果是这样,这段代码是什么意思
- 使用JavaScript[]文字的数组的长度是否真正反映了其在内存中的物理大小
- 与自实例化构造函数相比,使用对象文字是否具有性能优势
- 检查对象文字是否为'对象'
- 包含函数的对象文字表示法的执行速度是否比(全局范围)普通函数(取消引用)更快
- Object.create是否创建对象文字的实例
- 当涉及对象文字时,JavaScript是否提升if语句
- 如何检查文字中的属性是否未定义
- 对象文字是否返回新创建的对象
- 是否有单行用于在 Javascript 中创建对象文字,其中包含以参数命名的键
- 使用& # 39;eval # 39;ClojureScript中的特殊表单,用于确定表单是否为文字
- 是否有办法在字符串中使用非八进制文字