欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript模擬實現(xiàn)繼承的方法

 更新時間:2015年03月30日 16:34:14   作者:碼農(nóng)小牛  
這篇文章主要介紹了JavaScript模擬實現(xiàn)繼承的方法,實例分析了javascript類的操作與模擬實現(xiàn)繼承的技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了JavaScript模擬實現(xiàn)繼承的方法。分享給大家供大家參考。具體分析如下:

我們都知道,在JavaScript中只能模擬實現(xiàn)OO中的"類",也就意味著,在JavaScript中沒有類的繼承。我們也只能通過在原對象里添加或改寫屬性來模擬實現(xiàn)。

先定義一個父類,

//父類
function ParentClass() {
 this.className = "ParentClass";
 this.auth = "Auth";
 this.version = "V1.0";
 this.parentClassInfo = function () {
 return this.className + "\n" + this.auth + "\n" + this.version;
 }
}

一、prototype 實現(xiàn):

//子類
//1、prototype繼承
function ChildClassByPrototype() {
 this.date = "2013-07-26";
 this.classInfo = function () {
  return this.parentClassInfo() + "\n" + this.date;
 }
}
ChildClassByPrototype.prototype = new ParentClass();
var cctest1 = new ChildClassByPrototype();
cctest1.parentClassInfo();
cctest1.classInfo();

這種方式很簡單,只需把父類的實例賦值給子類的prototype屬性就行了,然后子類就可以使用父親的方法和屬性了。這里其實是用到了原型鏈向上查找的特性,比如這個例子中的 cctest1.parentClassInfo() 方法,JavaScript會先在ChildClassByPrototype的實例中查找是否有parentClassInfo()方法,子類中沒有,所以繼續(xù)查找ChildClassByPrototype.prototype屬性,而其prototype屬性的值是ParentClass的一個實例,該實例有parentClassInfo()方法,于是查找結(jié)束,調(diào)用成功。

二、apply 實現(xiàn):

//2、apply繼承
function ChildClassByApply() {
 ParentClass.apply(this, new Array());
 //ParentClass.apply(this, []);
 this.date = "2013-07-26";
 this.classInfo = function () {
  return this.parentClassInfo() + "\n" + this.date;
 }
}

JavaScript中的apply可以理解為用A方法替換B方法,第一個參數(shù)為B方法的對象本身,第二個參數(shù)為一個數(shù)組,該數(shù)組內(nèi)的值為需要傳遞給A方法對應(yīng)的參數(shù)列表,如果參數(shù)為空,即沒有參數(shù)傳遞,可通過 new Array()、[] 來傳遞。

三、call + prototype 實現(xiàn):

//3、call+prototype繼承
function ChildClassByCall() {
 ParentClass.call(this, arguments);
 this.date = "2013-07-26";
 this.classInfo = function () {
  return this.parentClassInfo() + "\n" + this.date;
 }
}
ChildClassByCall.prototype = new ParentClass();

call和apply作用類似,即都是用A方法替換B方法,只是傳遞的參數(shù)不一樣,call方法的第一個參數(shù)為B方法的對象本身,后續(xù)的參數(shù)則不用Array包裝,需直接依次進行傳遞。既然作用差不多,為何多了一句 原型賦值呢?這是因為call方法只實現(xiàn)了方法的替換而沒有對對象屬性進行復(fù)制操作。

每種方法都有其適用環(huán)境,比如,如果父類帶有有參構(gòu)造函數(shù):

function ParentClass(className, auth, version) {
 this.className = className;
 this.auth = auth;
 this.version = version;
 this.parentClassInfo = function () {
 return this.className + "\n" + this.auth + "\n" + this.version;
 }
}

這種情況下,prototype就不適用了,可選用apply或call;

function ChildClassByApply(className, auth, version) {
 ParentClass.apply(this, [className, auth, version]);
 this.date = "2013-07-26";
 this.classInfo = function () {
  return this.parentClassInfo() + "\n" + this.date;
 }
}
function ChildClassByCall(className, auth, version) {
 ParentClass.call(this, arguments[0], arguments[1], arguments[2]);
 //ParentClass.call(this, className, auth, version);
 this.date = "2013-07-26";
 this.classInfo = function () {
  return this.parentClassInfo() + "\n" + this.date;
 }
}
ChildClassByCall.prototype = new ParentClass();

實例化:

var cctest2 = new ChildClassByApply("ParentClass", "Auth", "V1.0");
var cctest3 = new ChildClassByCall("ParentClass", "Auth", "V1.0");

在apply和call中,又該如何取舍呢?在OO的繼承中,子類繼承于父類,那么它應(yīng)該也是父類的類型。即,ChildClassByCall、ChildClassByApply應(yīng)該也是ParentClass類型,但我們用"instanceof"檢測一下就會發(fā)現(xiàn),通過apply繼承的子類,并非ParentClass類型。所以,我們建議用call + prototype 來模擬實現(xiàn)繼承。據(jù)說,Google Map API 的繼承就是使用這種方式喲。

希望本文所述對大家的javascript程序設(shè)計有所幫助。

相關(guān)文章

  • 微信小程序tabBar 返回tabBar不刷新頁面

    微信小程序tabBar 返回tabBar不刷新頁面

    這篇文章主要介紹了微信小程序tabBar 返回tabBar不刷新頁面,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • JavaScript實現(xiàn)商品評價五星好評

    JavaScript實現(xiàn)商品評價五星好評

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)商品評價五星好評,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 添加JavaScript重載函數(shù)的輔助方法2

    添加JavaScript重載函數(shù)的輔助方法2

    話說,人就是要被關(guān)注才有動力啊于是修改了下上次寫的《添加JavaScript重載函數(shù)的輔助方法》在添加方法的時候增加了一個參數(shù) 用于限制參數(shù)的類型。
    2010-07-07
  • 小程序?qū)崿F(xiàn)簡單驗證碼倒計時

    小程序?qū)崿F(xiàn)簡單驗證碼倒計時

    這篇文章主要為大家詳細介紹了小程序?qū)崿F(xiàn)簡單驗證碼倒計時,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Three.js+React實現(xiàn)3D文字懸浮效果

    Three.js+React實現(xiàn)3D文字懸浮效果

    這篇文章主要介紹了如何利用Three.js+React制作出神奇的3D文字懸浮效果,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-03-03
  • javascript 禁止復(fù)制網(wǎng)頁

    javascript 禁止復(fù)制網(wǎng)頁

    常見的一些禁止復(fù)制網(wǎng)頁的代碼,但破解方法也不見容易,這里就不說了,可以看本站以前發(fā)布的文章。
    2009-06-06
  • js實現(xiàn)3D圖片逐張輪播幻燈片特效代碼分享

    js實現(xiàn)3D圖片逐張輪播幻燈片特效代碼分享

    這篇文章主要介紹了js實現(xiàn)3D圖片逐張輪播幻燈片特效,圖片輪播效果特別適合做產(chǎn)品展示,具有很強的立體效果,感興趣的小伙伴可以參考下。
    2015-09-09
  • 完美實現(xiàn)仿QQ空間評論回復(fù)特效

    完美實現(xiàn)仿QQ空間評論回復(fù)特效

    這篇文章主要介紹了完美實現(xiàn)仿QQ空間評論回復(fù)特效,非常的實用,附上實例代碼給大家,有需要的小伙伴參考下吧。
    2015-05-05
  • JS 拖動效果實現(xiàn)代碼 比較簡單

    JS 拖動效果實現(xiàn)代碼 比較簡單

    JS拖動效果,計算的位移,主要是應(yīng)用了鼠標事件與坐標控制。
    2009-11-11
  • 淺談JSON.parse()和JSON.stringify()

    淺談JSON.parse()和JSON.stringify()

    本文給大家簡單描述了下JSON.parse()和JSON.stringify()的異同點,十分的實用,有需要的小伙伴可以參考下
    2015-07-07

最新評論