Czytałem kilka artykułów na temat ukrytych klas V8. Jednak mam jeszcze kilka pytań w mojej głowie:Usuwanie górę `ukryte koncepcję classes` V8
Jeśli, powiedzmy, istnieją dwa obiekty:
var a = { }
a.x = 5
a.y = 6
var b = { }
b.y = 7
b.x = 8
Czy oni w końcu z tej samej ukrytej klasy lub oddzielają tylko dlatego, że ktoś poszedł 0 + x + y
i drugi 0 + y + x
? Jak zrozumiałem, dostają różne klasy, ale chcą się upewnić, że je dostałem.
Następnie mamy tę sprawę:
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
}
Wykonaj to w końcu z tej samej ukrytej klasy? Mogę się domyślać, że a
, b
i c
zrobić ale d
nie. O ile nie dokonano sortowania na takich wyrażeń obiektowych (podobnie jak w przypadku krótkiej deklaracji tablicy analizowanej dla 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)
to coś podobnego do drugiej sprawy. Obiekty te wydają się takie same, z wyjątkiem tego, że ich pochodzenie (instanceof...
) jest inne. Czy jednak obiekty kończą się tą samą ukrytą klasą?
Javascript nie ma zajęć. Ukryte klasy nie są koncepcją, są wewnętrznymi szczegółami implementacji. Jeśli nie chcesz hackować v8 lub innej wirtualnej maszyny, która musi rozwiązać podobny problem, nie obchodzi cię to. –
Dbam o wydajność kodu, który piszę. Sam doświadczyłem, że łatwiej jest dbać o wydajność * niż o to chodzi * niż dbać o to, gdy ktoś narzeka, że działa zbyt wolno. – Pijusn
Istnieją aspekty wydajności, które naprawdę trzeba dbać w trakcie podróży. Podobnie jak przy wyborze optymalnych algorytmów, często potrzebne są dane buforowania i takie. Ale jeśli naprawdę musisz zadbać o wydajność na tym poziomie, prawdopodobnie nie powinieneś prawdopodobnie używać JavaScriptu. –