国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript玩轉繼承(三)

2024-05-06 16:05:25
字體:
來源:轉載
供稿:網友
在前兩篇文章中,介紹了構造繼承和原型繼承。今天把剩下的兩種寫完,這兩種的應用相對于前兩種來說應用很少,因此我把他們稱為是非主流繼承方式

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

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

核心對象的繼承擁有一定的價值,比如說Error對象,我們公司可能要自己實現一個Error 類來簡化今后的開發,那么這個時候我就要使用實例繼承法來繼承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());

結果讓我們滿意:

Javascript玩轉繼承(三)

Javascript玩轉繼承(三)

好,廢話不多說,這個是非主流繼承方式,基本只用于核心對象的繼承,記住就好!
接下來看看非主流繼承二:拷貝繼承法.

顧名思義,拷貝繼承,就是通過拷貝實現對象的繼承,拷貝什么呢?很明顯,就是對象的屬性和方法,還記得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())
{    }

明眼人一眼看出來,這個方法的缺點太明顯了:
將對象的屬性方法一一復制的時候,其實用的是反射,反射對效率的損傷我就不多說了。
和原型繼承一樣,必須初始化父類對象,當確定繼承關系時,但是參數還不確定時,玩不轉!

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

好了,下面說個常用的東西。混合繼承!
這個是基于兩個主流繼承方式的。對比兩個繼承方式,我們可以發現兩個繼承方式的優缺點是互補的,那就好辦了,混合到一起吧!

復制代碼 代碼如下:


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();
好了,兩種方式的混合,現在看看,是不是問題解決了呢?
var g=new Girl("Xuan",22);
alert(g instanceof People);
g.SayName();
g.Introduce();


Javascript玩轉繼承(三)

Javascript玩轉繼承(三)

Javascript玩轉繼承(三)

測試通過!

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 甘谷县| 承德县| 普洱| 汽车| 定陶县| 大洼县| 保亭| 武清区| 肇州县| 马关县| 永安市| 威宁| 洛阳市| 抚松县| 保山市| 扶绥县| 栖霞市| 郧西县| 呈贡县| 绵竹市| 永平县| 扶沟县| 丹巴县| 临沧市| 营山县| 陈巴尔虎旗| 鄂伦春自治旗| 泰州市| 大方县| 苍梧县| 沙雅县| 三明市| 资中县| 武川县| 廉江市| 全椒县| 富川| 枣强县| 泗阳县| 甘泉县| 扶绥县|