js繼承遇到的小問題

這兩天在看js繼承方面,它不像OC那種傳統(tǒng)的類繼承。js繼承方式還是挺多的。比如:原型繼承、原型冒充、復(fù)制繼承

原型繼承

原型繼承有點繞,js似乎沒有類的概念,構(gòu)造對象都是用的函數(shù)調(diào)用來實例化一個對象。函數(shù)都有一個prototype屬性,如果要繼承可以用函數(shù)的prototype屬性來賦值父類的一個實例,這樣就擁有父類的屬性和方法

<script>
     function Cat ()  {
            this.climb = function () {
            alert("爬樹");
        }
    }
     function Tiger()  {
            this.eat = function () {
            alert("吃肉");
        }
    }
    function Animal() {
            this.breath = function () {
                alert("呼吸");
            }
    }
    Tiger.prototype = new Cat();
    var tiger = new Tiger();
    tiger.eat();
    tiger.climb();

     console.log(tiger.__proto__);
     console.log(tiger.__proto__.__proto__);
     console.log(tiger.__proto__.__proto__.__proto__);
     console.log(tiger.__proto__.__proto__.__proto__.__proto__);

     var ani = new Animal();
    console.log(ani.__proto__);

    Tiger.prototype = ani;

    tiger = new Tiger();
    tiger.breath();
     tiger.eat();

     function All() {
         this.say = function () {
             alert("say");

         }
     }

    Animal.prototype = new All();
        ani = new Animal();
        ani.say();

</script>

原型冒充

注意call的用法

<script>

    function Good() {
        this.goodStudy = function () {
            console.log("好好學(xué)習(xí)");
            console.log(this);
        }
    }
    function Bad() {

    Good.call(this);
        this.badPlay = function () {
            console.log("就會玩");
        }
    }
    var bad = new Bad();
    bad.badPlay();
    bad.goodStudy();

</script>

復(fù)制繼承

<script>

    function Good() {
        this.iq = 120;
        this.goodStudy = function () {
            console.log("好好學(xué)習(xí)");
        }
    }

    function Bad(obj) {
        this.badPlay = function () {
            console.log("就會玩");
        }
        this.extend = function (obj) {
            for (var k in obj){
                this[k] = obj[k];
            }
        }
    }

    var good = new Good();
    var bad = new Bad();
    bad.extend(good);

    bad.goodStudy();
    console.log(bad.iq);

</script>

這里面遇到一個問題,在循環(huán)遍歷extend函數(shù)的時候,訪問對象屬性用的“[ ]”,如果用“.”會報錯,其實js對象屬性有兩種訪問形式:“.”和“[ ]",兩個有區(qū)別,性能方面“.”更高一些。
Obj.key 和 Obj[key] 我的通俗理解: 1、當(dāng)對象的屬性key不確定而是一個變量的時候必須使用[] 2、[]里可以是任意字符串,而. 不能隨便 3、使用. 號key可不加引號, 使用[] key有時候需要加引號。

嗯,就寫到這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 8,110評論 2 17
  • 博客內(nèi)容:什么是面向?qū)ο鬄槭裁匆嫦驅(qū)ο竺嫦驅(qū)ο缶幊痰奶匦院驮瓌t理解對象屬性創(chuàng)建對象繼承 什么是面向?qū)ο?面向?qū)ο?..
    _Dot912閱讀 1,527評論 3 12
  • 前端開發(fā)必須知道的JS(一) 原型和繼承 原型和閉包是Js語言的難點,此文主要講原型及原型實現(xiàn)的繼承,在(二)中會...
    JamHsiao_aaa4閱讀 172評論 0 0
  • 中午,我和媽媽送哥哥上作文課的啦?;貋頃r,我媽媽她還上超市給我買了許多好吃的,我媽媽還給我買了個玩具,還給我買了三...
    邸廣碩閱讀 175評論 0 1
  • 昨晚林澤偉買了兩張票,《會痛的十七歲》,結(jié)果他晚上要陪領(lǐng)導(dǎo),讓我?guī)Ю侠兹タ础M盹埵俏易龅?,抄了兩個菜,一個是酸菜肉...
    黃雨田閱讀 383評論 0 0

友情鏈接更多精彩內(nèi)容