- 看透JavaScript:原理、方法與實踐
- 韓路彪
- 646字
- 2020-11-28 15:50:48
7.5 對象的屬性不可以繼承
屬性不可繼承指的是,如果對象有多個層次,那么父子對象里的屬性不可以相互繼承和調用。我們來看下面的例子。
function logV(){ console.log(this.v); } var obj = {v:1}; obj.sonObj = {}; obj.logV = logV; obj.sonObj.logV = logV; obj.logV(); //1 obj.sonObj.logV(); //undefined
這個例子中,首先定義了一個obj對象和obj的子對象sonObj, obj有一個屬性v, sonObj沒有自己的屬性,然后將logV方法分別關聯到兩個對象,接著分別調用它們的logV方法,最后obj可以打印出v,而obj.sonObj找不到v,結果會打印出undefined,這就說明obj.sonObj不可以調用obj中的屬性。因此,在使用我們的原則時,一定要記住誰直接調用了方法this就指向誰,一定是直接調用而不是在調用鏈上出現過。
對象和屬性的關系就像一臺機器中組件和零件的關系,可以裝配其他零件的東西叫作組件,而裝配到組件上的東西可能還是組件,但父組件上面并不會直接裝配子組件上的零件。例如將水杯放到背包里,那么背包就是個組件,然后又將背包放到車里,這時車就成了組件(或者叫父組件,相對于車這個組件來說)背包就成了零件(也可以叫子組件),要從車里直接拿水杯是拿不到的,水杯是子組件背包的零件而不是父組件車的零件,只有先從車里拿到背包,然后才能從背包里拿到水杯,同樣要想從背包里拿車上放著的光盤也是拿不到的。
嵌套對象的作用主要是便于維護,就好像將雜七雜八的東西都分類放到各種各樣的小盒子里面,然后再將小盒子分類放到大盒子里,最后將所有大盒子都放到箱子里,這樣維護和使用起來就都方便了。有的資料會將這種嵌套對象叫作“命名空間”或者“包”,無論叫什么我們只要理解其本質就可以了。當然,在遇到那種叫法的時候我們也要明白別人說的其實就是嵌套對象。
推薦閱讀
- Oracle 11g從入門到精通(第2版) (軟件開發視頻大講堂)
- C++面向對象程序設計(微課版)
- Arduino開發實戰指南:LabVIEW卷
- BeagleBone Media Center
- Animate CC二維動畫設計與制作(微課版)
- Web程序設計(第二版)
- 精通網絡視頻核心開發技術
- Modern JavaScript Applications
- 小學生C++創意編程(視頻教學版)
- MongoDB,Express,Angular,and Node.js Fundamentals
- 寫給程序員的Python教程
- Python從入門到精通(第3版)
- 實戰Python網絡爬蟲
- SQL Server on Linux
- INSTANT Premium Drupal Themes