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?