真的很奇怪的对象创建JS基准

时间:2014-01-07 17:08:03

标签: javascript performance object constructor object-construction

我制作了一个简单的对象创建基准。我知道“有谎言,该死的谎言和基准”,但差异似乎很大。 任何人都可以告诉我,如果我做错了什么。或者如果没有,怎么可能? 我是JS的新手,所以请不要打败我。

http://jsperf.com/factoryvsconstvsobjectcreate/3

/编辑感谢Andrew Fedoniouk的一个小错误修正

1 个答案:

答案 0 :(得分:0)

Factory和Constructor测试之间的巨大差异是由于后者执行了一系列额外步骤。

当一个函数被调用为构造函数its [[Construct]] internal method is invoked时,这可能是性能差异的原因。查看[[Construct]]中涉及的所有步骤:

  

1。让obj成为新创建的本机ECMAScript对象。

     

2。按照8.12中的规定设置obj的所有内部方法。

     

3。将obj的[[Class]]内部属性设置为“Object”。

     

4。将obj的[[Extensible]]内部属性设置为true。

     

5。让proto成为使用参数“prototype”调用F的[[Get]]内部属性的值。

     

6。如果Type(proto)是Object,则将obj的[[Prototype]]内部属性设置为proto。

     

7。如果Type(proto)不是Object,则将obj的[[Prototype]]内部属性设置为标准内置Object原型对象,如15.2.4中所述。

     

8。设result是调用F的[[Call]]内部属性的结果,将obj作为this值提供,并将传递给[[Construct]]的参数列表作为args。

     

9。如果Type(result)是Object,则返回result。

     

10。返回obj。