V8中的隐藏类

Hidden classes in V8

本文关键字:隐藏 V8      更新时间:2023-09-26

我的问题是这个问题的后续:清除V8的"隐藏类"概念

假设我有以下JavaScript代码:

var values1 = [ 1, 2, 3, 4];
var values2 = [ 5, 6, 7, 8];
var fields = [ "f1", "f2", "f3", "f4" ];
function Construct (fields, values) {
   var i;
   for (i = fields.length - 1; i >= 0; --i) this [fields [i]] = values [i];
}
var a = new Construct (fields, values1);
var b = new Construct (fields, values2);

那么,ab最终会有相同的隐藏类吗?

这个问题的背景是,对我来说,如果在编程时不知道属性名,这似乎是利用"隐藏类"优化的唯一可能性。

实际意义:假设您编写了一个处理表格数据的应用程序,其中列的名称是动态的(编程时不知道)。然后表的行在语义上共享相同的类,但是如果引擎没有优化,您最好使用数组并在代码中手动进行"列名->索引"转换(这可能会使代码变得丑陋,因为您必须缓存索引)。

是。隐藏类是一个完全动态的优化。在第一个近似中,如果(1)两个对象是由同一段代码创建的,并且(2)它们以相同的顺序添加了相同的属性,则两个对象最终将具有相同的类。