官术网_书友最值得收藏!

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就指向誰,一定是直接調用而不是在調用鏈上出現過。

對象和屬性的關系就像一臺機器中組件和零件的關系,可以裝配其他零件的東西叫作組件,而裝配到組件上的東西可能還是組件,但父組件上面并不會直接裝配子組件上的零件。例如將水杯放到背包里,那么背包就是個組件,然后又將背包放到車里,這時車就成了組件(或者叫父組件,相對于車這個組件來說)背包就成了零件(也可以叫子組件),要從車里直接拿水杯是拿不到的,水杯是子組件背包的零件而不是父組件車的零件,只有先從車里拿到背包,然后才能從背包里拿到水杯,同樣要想從背包里拿車上放著的光盤也是拿不到的。

嵌套對象的作用主要是便于維護,就好像將雜七雜八的東西都分類放到各種各樣的小盒子里面,然后再將小盒子分類放到大盒子里,最后將所有大盒子都放到箱子里,這樣維護和使用起來就都方便了。有的資料會將這種嵌套對象叫作“命名空間”或者“包”,無論叫什么我們只要理解其本質就可以了。當然,在遇到那種叫法的時候我們也要明白別人說的其實就是嵌套對象。

主站蜘蛛池模板: 丹江口市| 德昌县| 岳西县| 大理市| 北流市| 汝南县| 固阳县| 江川县| 灵宝市| 澎湖县| 定结县| 菏泽市| 重庆市| 彩票| 称多县| 湘潭县| 夏河县| 望奎县| 平乐县| 平谷区| 剑阁县| 黄骅市| 南皮县| 松溪县| 梁河县| 屯门区| 顺义区| 澎湖县| 大姚县| 台东市| 图木舒克市| 年辖:市辖区| 揭阳市| 巴东县| 衡阳市| 汪清县| 密云县| 贵州省| 永泰县| 新泰市| 龙口市|