Czyszczenie koncepcji `ukrytych klas 'w V8
Przeczytałem kilka artykułów o ukrytych klasach V8. Wciąż mam jednak w głowie kilka pytań:
Jeśli, powiedzmy, są dwa obiekty:
var a = { }
a.x = 5
a.y = 6
var b = { }
b.y = 7
b.x = 8
Czy kończą z tą samą ukrytą klasą lub oddzielną tylko dlatego, że się udali0 + x + y
i inni0 + y + x
? Jak rozumiem, dostają różne klasy, ale chcą się upewnić, że je dostałem.
Wtedy mamy ten przypadek:
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
}
Czy mamy taką samą ukrytą klasę? Mogę to zgadnąća
, b
ic
rób, aled
nie. O ile nie ma jakiegoś sortowania na takich wyrażeniach obiektów (podobnie jak krótka deklaracja tablicy analizowana dla danego typu).
Wreszcie mamy to:
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)
Jest to podobne do drugiego przypadku. Obiekty te wydają się takie same, z wyjątkiem ich pochodzenia (instanceof...
) jest inny. Czy jednak obiekty mają tę samą ukrytą klasę?