JavaScript中的3種繼承方式

JavaScript中繼承的方式主要有3種;javascript

        第一種:原型鏈繼承,經過將子元素的原型指向父元素的實例對象來實現繼承 ;java

        缺點:字面量重寫原型會中斷關係,使用引用類型的原型,而且子類型還沒法給超類型傳遞參數函數

        第二種:借用構造函數繼承,經過繼承父元素的構造函數,來繼承其構造函數中聲明的一些屬性和方法;學習

        缺點:借用構造函數雖然解決了剛纔兩種問題,但沒有原型,則複用無從談起。因此咱們須要原型鏈+借用構造函數的模式,這種模式稱爲組合繼承測試

        第三種:原型鏈+構造函數,在原型中處理方法,在構造函數中處理屬性。this

        優勢:組合式繼承是比較經常使用的一種繼承方法,其背後的思路是 使用原型鏈實現對原型屬性和方法的繼承,而經過借用構造函數來實現對實例屬性的繼承。這樣,既經過在原型上定義方法實現了函數複用,又保證每一個實例都有它本身的屬性。prototype

        備註:放在代碼段裏是爲了方便測試和學習code

//(1)原型鏈
        function Animal(name,age) {
            this.name = name;
            this.age = age;
        };
        Animal.prototype.sayHello = function () {
            alert('hello');
        };
        function Dog(name,age) {
            //(2)借用構造函數
            Animal.call(this,name,age);
        }
        Dog.prototype = new Animal();
        Dog.prototype.run = function () {
            alert(this.name);
        }
        var dog = new Dog('huahua',2);
        console.log(dog);
        dog.sayHello();
        dog.run();
        //1)經過原型來實現繼承時,原型實際上會變成另外一個類型的實例,原來的實例屬性也就變成了如今的原型屬性
       // 2)在建立子類型的實例時,不能向超類型的構造函數傳遞參數。

        //(3)僞經典繼承
        // 將原型鏈和借用構造函數的技術組合在一塊兒。
       // 原理是:使用原型鏈實現對原型屬性和方法的繼承,而經過借用構造函數實現對實例屬性的繼承。

繼承關係圖:對象

相關文章
相關標籤/搜索