Klärung des "Hidden Classes" -Konzepts von V8

Ich habe einige Artikel über die versteckten Klassen von V8 gelesen. Ich habe jedoch noch ein paar Fragen im Kopf:

Angenommen, es gibt zwei Objekte:

var a = { }
a.x = 5
a.y = 6

var b = { }
b.y = 7
b.x = 8

Haben sie die gleiche versteckte Klasse oder trennen sie sich, nur weil man gegangen ist?0 + x + y und der andere0 + y + x? So wie ich es verstanden habe, bekommen sie verschiedene Klassen, aber ich möchte nur sicherstellen, dass ich es bekomme.

Dann haben wir diesen Fall:

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
}

Haben wir am Ende die gleiche versteckte Klasse? Das könnte ich mir vorstellena, b undc mach dochd nicht. Es sei denn, solche Objektausdrücke werden sortiert (ähnlich wie die Kurzdeklaration des Arrays, die für den Typ analysiert wird).

Schließlich haben wir Folgendes:

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)

Es ist ein bisschen ähnlich wie im zweiten Fall. Diese Objekte scheinen die gleichen zu sein, außer dass ihre Herkunft (instanceof...) ist anders. Haben Objekte jedoch die gleiche versteckte Klasse?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage