Прояснение концепции «скрытых классов» 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...) это отличается. Однако есть ли у объектов один и тот же скрытый класс?

Ответы на вопрос(2)

Ваш ответ на вопрос