Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 {}对象与自定义构造函数之间的隐藏类和等价性(v8)_Javascript_Performance_V8 - Fatal编程技术网

Javascript {}对象与自定义构造函数之间的隐藏类和等价性(v8)

Javascript {}对象与自定义构造函数之间的隐藏类和等价性(v8),javascript,performance,v8,Javascript,Performance,V8,鉴于本文: 如果创建构造函数,例如: function Point(x,y) { this.x = x; this.y = y; } 然后这样做: var obj1 = new Point(1,2); var obj2 = new Point(3,4); obj1.a = 5; obj1.b = 10; obj2.b = 10; obj2.a = 5; 这意味着您可以在幕后获得某种性能优化 但我想知道,如果你只是这样做: var obj1 = { a: 5, b: 10 } v

鉴于本文:

如果创建构造函数,例如:

function Point(x,y) {
  this.x = x;
  this.y = y;
}
然后这样做:

var obj1 = new Point(1,2);
var obj2 = new Point(3,4);

obj1.a = 5;
obj1.b = 10;

obj2.b = 10;
obj2.a = 5;
这意味着您可以在幕后获得某种性能优化

但我想知道,如果你只是这样做:

var obj1 = { a: 5, b: 10 }
var obj2 = { b: 10, a: 5 }
如果您对数千个对象遵循这种模式,或者为每个
var objn
实例创建了一个新的隐藏类,您会得到同样的性能优化吗


基本上想知道是否需要使用构造函数来获得这种性能优化。

正如文章摘要所述:

始终以相同的顺序实例化对象属性,以便共享隐藏的类和随后优化的代码

在您的另一个示例中,
var obj1={a:5,b:10};var obj2={b:10,a:5}
,属性的添加顺序显然不同,因此无法共享隐藏的类


您不必使用构造函数本身,但使用构造函数是确保获得所需性能的最简单方法。(这通常被认为是符合人体工程学和良好的编码实践。)

在这两种情况下,您都不会得到任何性能优化(我猜您指的是原型,但您不会使用它们)。更喜欢第二种方式。正如文章总结的那样:“始终以相同的顺序实例化对象属性”(以便它们获得相同的隐藏类)
obj1
obj2
在您的两个示例中都不同。dfsq:不确定您在说什么;当然,V8将在这两种情况下应用它所能应用的任何优化;在构造函数中分配所有属性(通常)更快,因为它避免了多态性。使用工厂函数,如
函数create(a,b){return{a,b};}
(称为
create(5,10)
)也可以确保属性始终以相同的顺序创建