原型鏈方法(仿傳統(tǒng))
child.prototype= new Parent();
所屬模式:
- 基于構(gòu)造器工作模式
- 使用原型鏈模式(ECMA標(biāo)準(zhǔn)中的默認(rèn)繼承機(jī)制)
提示:我們可以將方法與屬性集中可重用的部分遷移到原型鏈中迅箩,而將不可重用的那部分設(shè)置為對象的自身
僅從原型繼承法
child.prototype = parent.prototype
所屬模式:
- 基于構(gòu)造器工作模式
- 原型拷貝模式(不存在原型搀罢,所有的對象共享一個原型對象)
由于該模式在構(gòu)建繼承關(guān)系時不需要新建對象實(shí)例悲柱,效率上會有較好的表現(xiàn)。原型鏈上的查詢也會比較快臭笆,因?yàn)檫@里根本不存在鏈缭裆,而缺點(diǎn)在于對子對象的修改也會影響到其父對象。
臨時構(gòu)造器法
function extend (Child,Parent){
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
//還原Child.prototype的constructor;
Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
所屬模式:
- 基于構(gòu)造器工作模式
- 原使用型拷貝模式
它不同于
原型鏈方法
,它只繼承父對象的原型屬性淑际,而對于其自身屬性(也就是被構(gòu)造添加到this值中的屬性)則不予繼承畏纲。改模式在YUI與Extjs等程序庫均有應(yīng)用。另外春缕,該模式還為我們訪問父對象提供便利的方式(即使用uber屬性)盗胀。
原型屬性拷貝法
function extend2(Child,Parent){
var p = Parent.prototype;
var c = Child.prototype;
for (var i in p){
c[i]= p[i];
}
c.uber = p ;
}
所屬模式:
- 基于構(gòu)造器工作模式
- 拷貝屬性模式
- 使用原型模式
- 將父對象原型中的內(nèi)容全部轉(zhuǎn)換為子對象原型屬性。
- 無需為繼承單獨(dú)創(chuàng)造對象實(shí)例锄贼。
- 原型鏈本身也更短票灰。
全屬性拷貝法(淺拷貝)
function extendCopy(p){
var c = {};
for (var i in p){
c[i] = p[i];
}
c.uber = p;
return c;
}
所屬模式:
- 基于對象工作模式
- 屬性拷貝模式
非常簡單化,在Firebug宅荤、jQuery以及Prototype.js的早期版本中都又應(yīng)用屑迂。引入了淺拷貝的概念。不能作用于原型屬性冯键。
深拷貝法
function extendCopy(p){
var c = {};
for (var i in p){
c[i] = p[i];
}
c.uber = p;
return c;
}
//需要在遇到對象類型時重復(fù)一下
所屬模式:
- 基于對象工作模式
- 屬性拷貝模式
與淺拷貝基本相同惹盼,但是所有對象執(zhí)行的都是值傳遞。在jQuery近期版本中被廣泛應(yīng)用惫确。
原型繼承法
function object(o){
function F(){};
F.prototype = o;
return new F();
}
所屬模式:
- 基于對象工作模式
- 使用原型鏈模式
丟開了仿類機(jī)制手报,直接在對象之間構(gòu)建繼承關(guān)系。發(fā)揮原型固有優(yōu)勢改化。
擴(kuò)展與增強(qiáng)模式
function objectPlus(o,stuff){
var n;
function F(){};
F.prototype = o ;
n = new F();
n.uber = o;
for (var i in stuff){
n[i]=stuff[i];
}
return n;
}
所屬模式:
- 基于對象工作模式
- 使用原型鏈模式
- 屬性拷貝模式掩蛤。
該方法是原型繼承法和屬性拷貝法的混合應(yīng)用。它通過一個函數(shù)一次性完成對象的繼承與擴(kuò)展陈肛。
多重繼承法
function multi(){
var n ={}, stuff,j = 0,
len =arguments.length;
for( j=0; j<len; j++){
stuff = arguments[j];
for (var i in stuff){
n[j] =stuff[i];
}
}
return n;
}
所屬模式:
- 基于對象工作模式
- 屬性拷貝模式
一個混合插入式繼承實(shí)現(xiàn)揍鸟。它會按照父對象的出現(xiàn)順序依次對它們執(zhí)行屬性全拷貝。
寄生繼承法
function parasite(victim){
var that = object (victim);
that.more= 1;
return that;
}
所屬模式:
- 基于對象工作模式
- 使用原型鏈模式
該方法通過一個類似構(gòu)造器的函數(shù)來創(chuàng)建對象句旱。該函數(shù)會執(zhí)行相應(yīng)的對象拷貝蜈亩,并對其進(jìn)行擴(kuò)展懦窘,然后返回該拷貝。
構(gòu)造器借用法
function Child(){
Parent.apply(this,arguments);
}
所屬模式:
- 基于構(gòu)造器工作模式
- 該方法可以只繼承父對象的自身屬性稚配,也可以與
原型鏈方法
結(jié)合使用畅涂,以便從原型中繼承相關(guān)內(nèi)容。- 它便于我們的子對象繼承某個對象的具體屬性(并且還有可能是引用類屬性)時道川,選擇最簡單的處理方式午衰。
構(gòu)造器借用與屬性拷貝法
function Child(){
parent.apply(this,arguments);
}
extend2(Child,Parent);
所屬模式:
- 使用構(gòu)造器工具模式
- 使用原型鏈模式
- 屬性拷貝模式
整理自