Прояснение концепции «скрытых классов» V8
Я прочитал несколько статей о скрытых классах V8. Тем не менее, у меня все еще есть несколько вопросов в моей голове:
Если, скажем, есть два объекта:
var a = { }
a.x = 5
a.y = 6
var b = { }
b.y = 7
b.x = 8
У них в конечном итоге один и тот же скрытый класс или они разделены только потому, что один0 + x + y
и другие0 + y + x
? Как я поняла, у них разные классы, но я просто хочу убедиться, что я их получила.
Тогда у нас есть этот случай:
function Point(x, y) {
this.x = x
this.y = y
}
var a = new Point(7, 8)
var b = { }
b.x = 6
b.y = 8
var c = {
x: 8,
y: 9
}
var d = {
y: 9,
x: 80
}
У нас в конечном итоге один и тот же скрытый класс? Я мог бы догадаться, чтоa
, b
а такжеc
делать ноd
не делает. Если не выполняется некоторая сортировка таких выражений объектов (аналогично короткому объявлению массива, анализируемому для типа).
Наконец, у нас есть это:
function PointA(x, y) {
this.x = x
this.y = y
}
var a = new PointA(7, 8)
function PointB(x, y) {
this.x = x
this.y = y
}
var b = new PointB(7, 8)
Это похоже на второй случай. Эти объекты кажутся одинаковыми за исключением того, что их происхождение (instanceof...
) это отличается. Однако есть ли у объектов один и тот же скрытый класс?