首頁  >  文章  >  web前端  >  Javascript玩繼承(三)_javascript技巧

Javascript玩繼承(三)_javascript技巧

WBOY
WBOY原創
2016-05-16 16:49:131061瀏覽

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

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

核心物件的繼承擁有一定的價值,比如說Error對象,我們公司可能要自己實作一個Error 類別來簡化今後的開發,那麼這個時候我就要使用實例繼承法來繼承Error。

程式碼如下:

複製程式碼 程式碼如下:

function Ex🜝 var instance=new Error(mes);
    instance.NewError=function(){
        alert("Your Error is " 🎜>


好,測試下:


複製程式碼


結果讓我們滿意:



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

顧名思義,拷貝繼承,就是透過拷貝實現物件的繼承,拷貝什麼呢?很明顯,就是物件的屬性和方法,還記得Javascript中,類別其實就一個Hashtable麼?如果想不起來的話,就回去複習一下基礎,我可能會在一段時間後寫一篇關於Javascript物件的知識。 了解了這個就好辦了,直接看程式碼:

先寫一個Extend方法:




複製程式碼

程式碼如下:Function.prototype.Extend> >    for(var pro in obj)    {        //其實就是將父類的屬性與方式完全複製過去了  
}



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




複製程式碼

程式碼如下:

function Animal()function Animal()
function Animal()
>
function People()
{    }
People.Extend(new Animal())
{    }


明眼人一眼看出來,這個方法的缺點太明顯了:將物件的屬性方法一一複製的時候,其實實用的是反射,反射對效率的損傷我就不多說了。

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

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

好了,下面說個常用的東西。混合繼承!

這個是基於兩個主流繼承方式的。比較兩個繼承方式,我們可以發現兩個繼承方式的優缺點是互補的,那就好辦了,混合在一起吧!


複製代碼 代碼如下:
function People(name)
{
this.name=name;
    this.SayName=function(){
        alert("My name is " name);
}
}
function >{
    //建構繼承
    this.father=People;
    this.father(name);
    deleteete this.father;
this. 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玩轉繼承的方式就這些,歡迎大家繼續關注我的其他文章。 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn