Я прочитал несколько статей о скрытых классах 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
do, но 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...
) отличается. Однако существуют ли объекты с тем же скрытым классом?