javascript繼承的6種方法

來源:互聯網
上載者:User

標籤:action   other   prototype   string   weight   對象   ret   -name   自訂類   

1.原型鏈繼承

為了讓子類繼承父類的屬性(也包括方法),首先需要定義一個建構函式。然後,將父類的新執行個體賦值給建構函式的原型。

    function Parent(){        this.name = ‘mike‘;    }    function Child(){        this.age = 12;    }    Child.prototype = new Parent();//Child繼承Parent,通過原型,形成鏈條    var test = new Child();    alert(test.age);    alert(test.name);//得到被繼承的屬性    //繼續原型鏈繼承    function Brother(){   //brother構造        this.weight = 60;    }    Brother.prototype = new Child();//繼續原型鏈繼承    var brother = new Brother();    alert(brother.name);//繼承了Parent和Child,彈出mike    alert(brother.age);//彈出12

2.借用建構函式(類式繼承)
    function Parent(age){        this.name = [‘mike‘,‘jack‘,‘smith‘];        this.age = age;    }    function Child(age){        Parent.call(this,age);    }    var test = new Child(21);    alert(test.age);//21    alert(test.name);//mike,jack,smith    test.name.push(‘bill‘);    alert(test.name);//mike,jack,smith,bill
3.組合繼承
    function Parent(age){        this.name = [‘mike‘,‘jack‘,‘smith‘];        this.age = age;    }    Parent.prototype.run = function () {        return this.name  + ‘ are both‘ + this.age;    };    function Child(age){        Parent.call(this,age);//對象冒充,給超類型傳參    }    Child.prototype = new Parent();//原型鏈繼承    var test = new Child(21);//寫new Parent(21)也行    alert(test.run());//mike,jack,smith are both21
4.原型式繼承

這種繼承藉助原型並基於已有的對象建立新對象,同時還不用建立自訂類型的方式稱為原型式繼承

     function obj(o){         function F(){}         F.prototype = o;         return new F();     }    var box = {        name : ‘trigkit4‘,        arr : [‘brother‘,‘sister‘,‘baba‘]    };    var b1 = obj(box);    alert(b1.name);//trigkit4    b1.name = ‘mike‘;    alert(b1.name);//mike    alert(b1.arr);//brother,sister,baba    b1.arr.push(‘parents‘);    alert(b1.arr);//brother,sister,baba,parents
5.寄生式繼承

這種繼承方式是把原型式+原廠模式結合起來,目的是為了封裝建立的過程。

    function create(o){        var f= obj(o);        f.run = function () {            return this.arr;//同樣,會共用引用        };        return f;    }
var b2 = obj(box); 
alert(b2.name);
//trigkit4 alert(b2.arr);
//brother,sister,baba,parents

原型式繼承首先在obj()函數內部建立一個臨時性的建構函式 ,然後將傳入的對象作為這個建構函式的原型,最後返回這個臨時類型的一個新執行個體。

6.寄生組合式繼承
    function obj(o){        function F(){}        F.prototype = o;        return new F();    }    function create(parent,test){        var f = obj(parent.prototype);//建立對象        f.constructor = test;//增強對象    }    function Parent(name){        this.name = name;        this.arr = [‘brother‘,‘sister‘,‘parents‘];    }    Parent.prototype.run = function () {        return this.name;    };    function Child(name,age){        Parent.call(this,name);        this.age =age;    }
 

javascript繼承的6種方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.