JS原型鏈與Objective-C記憶體佈局不能說的祕密

fantasticbaby發表於2021-10-08
本篇文章並不是新知識的探索,文章沒啥含量,就是看到某2個不同領域的知識,被串聯起來,或者語言的設計思想被印證了感到開心而記錄下來。

JS 原型借鑑於 Self 語言
JS 屬性、方法在原型鏈的訪問
OC物件記憶體佈局

假期看了本關於 JS 的書。很多地方就是已知知識。但是看到2個地方感覺和現有知識體系有關聯,蠻有意思。拍照記錄了下

Javascript 借鑑了 Self 語言中關於原型的繼承,可能會比較陌生,什麼是“Self”?
看看 JS 的表現:假設從物件 O 中查詢屬性 X

  1. 如果 O 沒有 X 這個自有屬性,則會從 O 的原型物件查詢屬性 X
  2. 如果原型物件也沒有叫做 X 的自有屬性,但它有自己的原型,則繼續查詢這個原型的原型
  3. 這個過程會不斷繼續,直至找到屬性 X 或者查詢到一個原型為 null 的物件
    可見,物件通過其 prototype 屬性建立了一個用於繼承屬性的鏈條或連結串列。
    對比 OC 物件記憶體佈局,屬性或者方法訪問套路一致。
    其實,Self 語言由派生自 Smalltalk,也就是 Objective-C 的借鑑語言。訪問 JS 物件屬性、方法(找不到則從原型鏈上不斷回溯,直到找到或者找到元類物件 null),這個特性和 OC 一模一樣。

關於 Self 語言有2箇中文 PDF可供翻閱。SELF:簡潔的威力克隆的反攻

相關文章