我制作了一个简单的对象创建基准。我知道"有谎言,该死的谎言和基准",但差异似乎很大。有人能告诉我我做错了什么吗。否则,怎么可能呢?我是JS的新手,所以请不要打败我。
http://jsperf.com/factoryvsconstvsobjectcreate/3
/编辑感谢Andrew Fedoniouk的一个小错误修复
Factory测试和Constructor测试之间的巨大差异是由于后者执行了一系列额外的步骤。
当函数作为构造函数调用时,它的[[Construct]]内部方法会被调用,这很可能是性能差异的原因。查看[[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]]内部属性设置为15.2.4中所述的标准内置Object原型对象。
8.设result为调用F的[[Call]]内部属性的结果,提供obj作为this值,并提供传递到[[Construct]]中的参数列表作为args。
9.如果Type(result)为Object,则返回result。
10.返回目标