我制作了一个简单的对象创建基准。我知道“有谎言,该死的谎言和基准”,但差异似乎很大。 任何人都可以告诉我,如果我做错了什么。或者如果没有,怎么可能? 我是JS的新手,所以请不要打败我。
http://jsperf.com/factoryvsconstvsobjectcreate/3
/编辑感谢Andrew Fedoniouk的一个小错误修正
答案 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。