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

时间:2018-02-21 22:31:21

标签: javascript performance v8

鉴于这篇文章:

http://richardartoul.github.io/jekyll/update/2015/04/26/hidden-classes.html

如果您创建一个构造函数,例如:

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实例创建的新隐藏类。

基本上想知道是否需要使用构造函数来进行性能优化。

1 个答案:

答案 0 :(得分:2)

正如文章在摘要中所说:

  

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

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

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