首頁 > web前端 > js教程 > JavaScript繼承模式粗探_javascript技巧

JavaScript繼承模式粗探_javascript技巧

WBOY
發布: 2016-05-16 15:20:24
原創
1084 人瀏覽過

真正意義上來說Javascript並不是一門物件導向的語言,沒有提供傳統的繼承方式,但是它提供了一種原型繼承的方式,利用自身提供的原型屬性來實現繼承。 Javascript原型繼承是一個被說爛掉了的話題,但是自己對於這個問題一直沒有徹底理解,今天花了點時間又看了一遍《Javascript模式》中關於原型實現繼承的幾種方法,下面來談談JS中比較簡單的繼承方法,如果大家有不同意見,歡迎建議。

最基礎的原型鏈繼承在這裡就不複述了,主要講一下其他的繼承模式。

1.借用建構子繼承

function Father (name) {
this.name=name;
}
function Son (name) {
Father.call(this,name); //在子类型中调用超类型的构造函数
this.age=15;
}
var me=new Son("Su"); 
登入後複製

好處:可以為子類型傳遞參數,如圖中的name屬性。

壞處:1.方法在建構子中定義,無法重複使用。 2.超類型原型中定義的方法對子類型是不可見的。

2.組合繼承(綜合原型鏈與建構子)

//超类型构造函数function Father (name) {
this.name=name;
this.famMember=[];
}//超类型构造函数原型方法
Father.prototype.sayName=function () {
alert(this.name);
}//子类型构造函数
function Son (name,age) {
Father.call(this,name); //构造函数方法
this.age=age;
}
Son.prototype=new Father(); //重写子类型原型对象
Son.prototype.constructor=Son; //重写构造函数属性指向子类型
Son.prototype.sayAge=function () {
alert(this.age);
} //重写原型对象后再加入方法
var me=new Son("Su",15);
me.famMember.push("dad","mom"); //子类型可以调用超类型构造函数内的方法var he=new Son("Li",14);alert(he.famMember); // [] 
登入後複製

好處:不同的子類別既可以擁有自己的屬性,也可以使用相同的方法。

壞處:這種方法需要呼叫2次超類型的建構函數,同名的屬性方法會被覆寫一次。

3.原型式繼承 (類似Object.create())

function object (o) {
function F () {}
F.prototype=o;
return new F();
}var obj={}; //将obj对象传入作为新对象的原型。var me=object(obj); 
登入後複製

使用這種方法繼承需要有一個物件作為原型對象,所以所有繼承其的子類型的屬性方法都是共用的。

ES5透過新增Object.creatr()方法規範了原型式繼承。

4.寄生式繼承 (可以設定私有方法的原型式繼承)

function object (o) {
function F () {}
F.prototype=o;
return new F();
}
var obj={}; //将obj对象传入作为新对象的原型。到这里都与原型式继承相同function creObj(o) {  var clone=object(obj);  clone.sayHi=function () {    alert("Hi");  };return clone; }
var me=creObj(obj); 
登入後複製

好處:這種方式彌補了原型式繼承只有公有屬性方法的缺陷,使子類型能有私有屬性方法。

5.寄生組合式繼承

function inherit (father,son) {
var pro=Object(father.prototype); //创建超类型原型对象的副本
pro.constructor=son;
son.prototype=pro;           //将副本作为子类型的原型对象
} 
登入後複製

本方法用來彌補組合繼承中屬性方法所覆蓋的問題。

用上圖程式碼取代組合繼承中 Son.prototype=new Father(); 這段程式碼。這樣只需呼叫一次父型別的建構函數,避免了創造多餘不必要的屬性方法,並且保持了原型鏈不改變,是一種理想的引用型別繼承方法。

關於js繼承模式先粗略給大家介紹這麼多,相信對大家有所幫助,更多資訊請繼續關注腳本之家網站。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板