Ho letto alcuni articoli sulle classi nascoste del V8. Tuttavia, ho ancora alcune domande nella mia testa:Cancellare il concetto di `classi nascoste` di V8
Se, diciamo, ci sono due oggetti:
var a = { }
a.x = 5
a.y = 6
var b = { }
b.y = 7
b.x = 8
vanno a finire con la stessa classe nascosto o separato solo perché uno è andato 0 + x + y
e l'altro 0 + y + x
? Come ho capito, ottengono classi diverse, ma voglio solo assicurarmi di averlo capito.
allora, abbiamo questo caso:
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
}
fare si finisce con la stessa classe di nascosto? Potrei supporre che a
, b
e c
, ma non lo sia lo d
. A meno che non ci sia un certo ordinamento su tali espressioni oggetto (analogamente alla breve dichiarazione dell'array che viene analizzata per il tipo).
Infine, abbiamo questo:
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)
È sorta simile al secondo caso. Questi oggetti sembrano gli stessi eccetto che la loro origine (instanceof...
) è diversa. Tuttavia, ci gli oggetti finiscono con la stessa classe nascosta?
Javascript non ha classi. Le classi nascoste non sono concetti, sono dettagli interni dell'implementazione. A meno che tu non voglia incidere v8 o altre macchine virtuali che devono risolvere problemi simili, non ti interessa. –
Mi interessa davvero le prestazioni del codice che scrivo. Ho sperimentato me stesso che è più semplice preoccuparsi delle prestazioni * come si va * piuttosto che preoccuparsi di ciò quando qualcuno si lamenta che funziona troppo lentamente. – Pijusn
Ci sono aspetti delle prestazioni che devi davvero preoccuparti mentre vai. Come scegliere algoritmi ottimali, memorizzare nella cache i dati necessari spesso e così via. Ma se hai davvero bisogno di preoccuparti delle prestazioni a questo livello, non dovresti probabilmente usare JavaScript in primo luogo. –