標籤: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種方法