Javascript玩轉繼承(三)
來源:易賢網(wǎng) 閱讀:964 次 日期:2014-05-09 14:31:22
溫馨提示:易賢網(wǎng)小編為您整理了“Javascript玩轉繼承(三)”,方便廣大網(wǎng)友查閱!

首先,我們來看非主流繼承一:實例繼承法。

我也不說那么多廢話了,既然是非主流繼承,就一定不常用,既然不常用還存在,那就只有一個因素,他用于特定的場合。實例繼承法,就主要用于核心對象的繼承,也是目前為止唯一能夠解決核心對象繼承的方式。

核心對象的繼承擁有一定的價值,比如說Error對象,我們公司可能要自己實現(xiàn)一個Error 類來簡化今后的開發(fā),那么這個時候我就要使用實例繼承法來繼承Error。

代碼如下:

function ExtendingError(mes)

{

var instance=new Error(mes);

instance.NewError=function(){

alert("Your Error is "+mes);

}

return instance;

}

好,測試下:

代碼如下:

var e=new ExtendingError("Your number is less than one");

e.NewError();

alert(e.toString());

結果讓我們滿意:

1.jpg

好,廢話不多說,這個是非主流繼承方式,基本只用于核心對象的繼承,記住就好!

接下來看看非主流繼承二:拷貝繼承法.

顧名思義,拷貝繼承,就是通過拷貝實現(xiàn)對象的繼承,拷貝什么呢?很明顯,就是對象的屬性和方法,還記得Javascript中,類其實就一個Hashtable么?如果想不起來的話,就回去復習一下基礎,我可能會在過一段時間寫一篇關于Javascript對象的知識。

了解了這個就好辦了,直接看代碼:

首先寫一個Extend方法:

代碼如下:

Function.prototype.Extend=function(){

for(var pro in obj)

{

//這樣其實就是把父類的屬性和方法完全復制過去了

this.prototype[pro]=obj[pro];

}

}

好了,再寫段代碼看下如何使用:

代碼如下:

function Animal()

{ }

function People()

{ }

People.Extend(new Animal())

{ }

明眼人一眼看出來,這個方法的缺點太明顯了:

將對象的屬性方法一一復制的時候,其實用的是反射,反射對效率的損傷我就不多說了。

和原型繼承一樣,必須初始化父類對象,當確定繼承關系時,但是參數(shù)還不確定時,玩不轉!

總之,這個方法一般情況下不用。

好了,下面說個常用的東西?;旌侠^承!

這個是基于兩個主流繼承方式的。對比兩個繼承方式,我們可以發(fā)現(xiàn)兩個繼承方式的優(yōu)缺點是互補的,那就好辦了,混合到一起吧!

代碼如下:

function People(name)

{

this.name=name;

this.SayName=function(){

alert("My name is "+name);

}

}

function Girl(name,age)

{

//構造繼承

this.father=People;

this.father(name);

delete this.father;

this.Introduce=function(){

alert("My name is "+name+".I am"+age);

}

}

//原型繼承

Girl.prototype=new People();

好了,兩種方式的混合,現(xiàn)在看看,是不是問題解決了呢?

var g=new Girl("Xuan",22);

alert(g instanceof People);

g.SayName();

g.Introduce();

2.jpg

測試通過!

這是一個相對完美的解決方案,但是卻增加了代碼的復雜度,所以具體的方案還要靠大家在實踐中去選擇。

Javascript玩轉繼承的方式就這些,歡迎大家繼續(xù)關注我的其他文章。

更多信息請查看IT技術專欄

更多信息請查看網(wǎng)絡編程
易賢網(wǎng)手機網(wǎng)站地址:Javascript玩轉繼承(三)

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權所有:易賢網(wǎng)