javascript關(guān)于繼承解析

字號:


    下面小編就為大家全面的介紹一下javascript在的繼承。希望對大家有所幫助。一起跟隨小編過來看看吧
    原型式繼承
    調(diào)用一個函數(shù),接收這個函數(shù)返回來的對象,這個對象的原型就是傳入函數(shù)的參數(shù)對象。
    如:
    function  personObject(o){
        function F(){}
        F.prototype = o;
        return new F();
    }
    var person = {
       name:"Nicholas",
       friends:["Shelby","Court","Van"]
    }
    var person_one = personObject(person);
    從上面的代碼中,我們知道person是person_one的原型。ES5中添加了一個方法規(guī)范化原型式繼承,這個方法是Object.create(),這個方法有兩個參數(shù),第一個是作為新對象原型的對象,像上面的person,第二個是為新對象定義額外屬性的對象。第二個參數(shù)可選。
    如:
    var person_one = Object.create(person, {
            name: {
                value:"Jon"
          }
    });
    當(dāng)你只想讓一個對象與另一個對象保持類似時,可以使用原型式繼承。
    寄生式繼承   
    在一個函數(shù)里實現(xiàn)一次原型式繼承,然后為接收到的這個對象添加自己的屬性與方法。
    如:
    function createAnother(o){
       var person_one = personObject(o);
       person_one.sayHi = function(){
           alert(" hi ");
       }
       return person_one;
    }
    寄生組合式繼承
    組合繼承也有其缺點,它實現(xiàn)了兩次屬性繼承,而寄生組合式繼承就避免了這個問題。實例通過構(gòu)造函數(shù)繼承了屬性,而原型的方法則是通過寄生式繼承的方式來繼承。
    如:
    function inherit(subType, superType){
       var prototype = Object(superType.prototype);
       prototype.constructor = subType;
       subType.prototype = prototype;
    }
    通過調(diào)用上面的函數(shù),實現(xiàn)subTye.prototype的原型是superType.prototype,完成了原型方法的繼承。
    以上這篇javascript關(guān)于繼承解析就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考