我讀過一些關於V8隱藏類的文章。不過,我仍然有我的頭幾個問題:清除V8的隱藏類概念
如果,比方說,有兩個對象:
var a = { }
a.x = 5
a.y = 6
var b = { }
b.y = 7
b.x = 8
難道他們結束了同一個隱藏類或分開只是因爲一個人去0 + x + y
和另一個0 + y + x
?據我瞭解,他們得到不同的班,但只是想確保我得到了它。
然後,我們有這樣的情況:
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
}
難道我們結束了同一個隱藏類?我可能猜到a
,b
和c
做但d
沒有。除非在這樣的對象表達式上進行了一些排序(類似於針對該類型分析的數組的短聲明)。
最後,我們有這樣的:
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)
是八九不離十類似第二種情況。除了它們的來源(instanceof...
)不同之外,這些對象似乎相同。但是,那裏的對象最終是否有相同的隱藏類?
Javascript沒有課程。隱藏的類不是概念,它們是實現的內部細節。除非你想破解v8或其他需要解決類似問題的虛擬機,否則你並不在意。 –
我其實關心我寫的代碼的性能。我經歷過我自己,當你走的時候關心表現*而不是在有人抱怨跑步速度太慢時關心它會更簡單。 – Pijusn
有些方面的表現,你確實需要關心,因爲你去。就像選擇最佳算法一樣,緩存你經常需要的數據等等。但是如果你真的需要關心這個級別的性能,那麼你不應該首先使用JavaScript。 –