Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 非常奇怪的对象创建JS基准_Javascript_Performance_Object_Constructor_Object Construction - Fatal编程技术网

Javascript 非常奇怪的对象创建JS基准

Javascript 非常奇怪的对象创建JS基准,javascript,performance,object,constructor,object-construction,Javascript,Performance,Object,Constructor,Object Construction,我制作了一个简单的对象创建基准。我知道有谎言,该死的谎言和基准,但差别似乎很大。 谁能告诉我我做错了什么吗。如果没有,怎么可能呢? 我是JS新手,所以请不要打我 /编辑感谢Andrew Fedoniouk的小错误修复工厂测试和构造函数测试之间的巨大差异是由于后者中执行了一系列额外的步骤 当函数作为构造函数调用时,这可能是性能差异的原因。查看[[Construction]]中涉及的所有步骤: 一,。让obj成为新创建的本机ECMAScript对象 二,。按照8.12的规定设置obj的所有内部方法

我制作了一个简单的对象创建基准。我知道有谎言,该死的谎言和基准,但差别似乎很大。 谁能告诉我我做错了什么吗。如果没有,怎么可能呢? 我是JS新手,所以请不要打我


/编辑感谢Andrew Fedoniouk的小错误修复

工厂测试和构造函数测试之间的巨大差异是由于后者中执行了一系列额外的步骤

当函数作为构造函数调用时,这可能是性能差异的原因。查看[[Construction]]中涉及的所有步骤:

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

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

三,。将obj的[[Class]]内部属性设置为Object

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

五,。设proto是使用参数prototype调用F的[[Get]]内部属性的值

六,。如果Typeproto是Object,则将obj的[[Prototype]]内部属性设置为proto

七,。如果Typeproto不是Object,则将obj的[[Prototype]]内部属性设置为标准内置对象Prototype对象,如15.2.4所述

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

九,。如果Typeresult是对象,则返回结果

十,。返回obj


为完整起见,还应列出工厂案例中涉及的步骤。您可能会感到惊讶,但这两种情况下的步骤几乎相同。@c-smile我的观点是工厂方法只调用[[call]],而构造函数方法调用[[construct]],后者在步骤8中依次调用[[call]]。这就是开销。我想看看新构造函数、工厂和对象的结果。创建。。。因为您在每个测试中都有几行代码,只需执行设置。你真正感兴趣的是对象生成部分。我相信你的测试用例是不正确的——不清楚你在那里测量了什么。下面是测试对象创建速度的测试:@c-smile您的测试有一个bug。每次在工厂,它都会将返回值分配给obj。毕竟。我想测量整个模式,而不仅仅是它的对象创建。是的,检查这个。我想说,文字创建和构造函数创建之间的差异是微不足道的。作为整体模式测试,我认为它不实用。通常类/工厂声明只在启动时发生一次。你是对的。有人知道它代表记忆吗?有趣的是,即使在你的测试中,也有区别。但也许这就是工作实例的代价。