- TypeScript入門與實戰
- 鐘勝平編著
- 802字
- 2021-01-15 15:36:00
3.5.2 原型對象
每個對象都有一個原型。對象的原型既可以是一個對象,即原型對象,也可以是null值。原型對象又有其自身的原型,因此對象的原型會形成一條原型鏈,原型鏈將終止于null值。原型對象本質上是一個普通對象,用于在不同對象之間共享屬性和方法。對象與其原型之間具有隱含的引用關系,如圖3-7所示。
在圖3-7中,animal、dog和cat均表示對象。dog和cat對象的原型對象均為animal對象;而animal對象的原型為null值。dog和cat與其原型animal之間具有隱含的引用關系,該關系是通過對象的一個內部屬性來維持的,即圖3-7中的“[[Prototype]]”屬性。所謂隱含的引用關系是指,對象的原型不是對象的公共屬性,因此無法通過對象屬性訪問來直接獲取對象的原型。該圖也展示了對象的原型會形成一條原型鏈,例如從dog到animal并終止于null值的虛線就表示了一條原型鏈。
原型能夠用來在不同對象之間共享屬性和方法,JavaScript中的繼承機制也是通過原型來實現的。原型的作用主要體現在查詢對象某個屬性或方法時會沿著原型鏈依次向后搜索,如圖3-8所示。
在訪問dog對象上的color屬性時,先嘗試在dog對象上查找該屬性。若找到color屬性,則返回屬性值;若沒有找到color屬性,則沿著原型鏈在原型對象animal中繼續查找color屬性。此例中,dog對象沒有color屬性而animal對象包含了color屬性,因此最終會返回animal對象上的color屬性值。如果直到原型鏈的盡頭(null值)也沒有找到相應屬性,那么會返回undefined值而不是產生錯誤。
如果對象本身和其原型對象上同時存在要訪問的屬性,那么就會產生遮蔽效果。在這種情況下,當前對象自身定義的屬性擁有最高的優先級,如圖3-9所示。
此例中,在dog對象和animal對象上都定義了color屬性。在dog對象上讀取color屬性時,dog對象自身定義的color會被優先選用,而原型對象animal上的color屬性會被忽略。
需要注意的是,原型對象在屬性查詢和屬性設置時起到的作用是不對等的。在查詢對象屬性時會考慮對象的原型,但是在設置對象屬性時不會考慮對象的原型,而是直接修改對象本身的屬性值。
- ClickHouse性能之巔:從架構設計解讀性能之謎
- GitLab Cookbook
- iOS 9 Game Development Essentials
- Python爬蟲開發與項目實戰
- Practical Windows Forensics
- 假如C語言是我發明的:講給孩子聽的大師編程課
- Visual Basic程序設計習題解答與上機指導
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第2版)
- Getting Started with NativeScript
- Java程序設計
- C語言程序設計教程
- Java程序設計案例教程
- 大話Java:程序設計從入門到精通
- Red Hat Enterprise Linux Troubleshooting Guide
- MySQL程序員面試筆試寶典