最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個JavaScript繼承的實現(xiàn)

 更新時間:2006年10月24日 00:00:00   作者:  
Author:尹偉銘

Blog:http://my.donews.com/yinwm/

如我前面的文章說的,對于JavaScript,一個類,就是一個function,他的類方法(也就是static的)都是作為這個function的一部分,而實例方法,都是在prototype上面的。
function ClassA() {
}

ClassA.staticMethod = function () {
}

ClassA.prototype.instanceMethod = function () {
}

在我這個實現(xiàn)當(dāng)中,一個類的繼承是拷貝父類的所有類方法,這樣子類就有了父類的靜態(tài)方法。
然后讓子類的prototype.prototype指向父類的prototype.
然后可以根據(jù)自己的需要,重寫一些方法。
function ClassB() {
}
ClassB.staticMethod = ClassA.staticMethod;
ClassB.prototype.prototype = ClassA.prototype;
ClassB.prototype.instanceMethod = function () {
// method 2
}

對于子類,使用一個prototype的鏈,來實現(xiàn)方法的實例方法的繼承。之所以選擇這種實現(xiàn)方法,是因為子類是要重寫其中的某些方法的。而prototype又是一個reference,所以直接的寫作ClassB.prototype = ClassA.prototype,會在重寫ClassB的實例方法的同時,破壞ClassA的實例方法。而修改后的方法則會屏蔽父類的。

尋找方法的順序是,instanceA.prototype.method -> ClassA.prototype.
此時對于類方法的繼承,已經(jīng)實現(xiàn),現(xiàn)在需要實現(xiàn)在子類中,調(diào)用父類的方法。
對于Java,這樣的使用是很平常的
public void method() {
super.method();
}
在JavsScript中,為了實現(xiàn)此類功能,所以必須保留一個parent的reference,指向ParentClass.prototype.
ClassB.prototype.parent = ClassA.prototype.
那么在instanceB里面調(diào)用this.parent.method.call(this);就可以使用父類的方法了。使用call調(diào)用,是為了把自己的數(shù)據(jù)傳到父類。更漂亮的解決方法,我還沒有想到。

所以完成的代碼是
function ClassA() {
}

ClassA.prototype.method1 = function () {
}

ClassA.staticMethod = function () {
}

function ClassB(){
}

ClassB.staticMethod = ClassA.staticMethod;

ClassB.prototype.prototype = ClassB.prototype.parent = ClassA.prototype;

這個我抽象出來一個extend方法,

var LCore = function () {
}

LCore.extend = function (destination, source) {
// copy all functons
for (var prop in source) {
if (prop == “prototype”) {
continue;
}

destination.prototype[prop] = source[prop];
}

// make a reference for parent and reference prototype
destination.prototype.prototype = destination.prototype.parent = source.prototype;

return destination;

相關(guān)文章

  • 讓div層隨鼠標(biāo)移動的實現(xiàn)代碼 ie ff

    讓div層隨鼠標(biāo)移動的實現(xiàn)代碼 ie ff

    隨鼠標(biāo)移動的div層使用ie ff ,大家可以注意下兼容性的問題。
    2009-12-12
  • IP地址輸入框

    IP地址輸入框

    IP地址輸入框...
    2006-08-08
  • JS document文檔的簡單操作完整示例

    JS document文檔的簡單操作完整示例

    這篇文章主要介紹了JS document文檔的簡單操作,結(jié)合完整實例形式詳細分析了JavaScript document文檔元素添加、刪除、獲取、創(chuàng)建等相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2020-01-01
  • JS異步處理的進化史深入講解

    JS異步處理的進化史深入講解

    這篇文章主要給大家介紹了關(guān)于JS異步處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用JS具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 微信小程序?qū)崿F(xiàn)實時圓形進度條的方法示例

    微信小程序?qū)崿F(xiàn)實時圓形進度條的方法示例

    這篇文章主要給大家介紹了利用微信小程序?qū)崿F(xiàn)實時圓形進度條的方法,文中給出了詳細的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-02-02
  • 詳解webpack自動生成html頁面

    詳解webpack自動生成html頁面

    本篇文章主要介紹了詳解webpack自動生成頁面,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • layui table 表格上添加日期控件的兩種方法

    layui table 表格上添加日期控件的兩種方法

    今天小編就為大家分享一篇layui table 表格上添加日期控件的兩種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript中boolean類型之三種情景實例代碼

    JavaScript中boolean類型之三種情景實例代碼

    下面小編就為大家?guī)硪黄狫avaScript中boolean類型之三種情景實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • JS返回只包含數(shù)字類型的數(shù)組實例分析

    JS返回只包含數(shù)字類型的數(shù)組實例分析

    這篇文章主要介紹了JS返回只包含數(shù)字類型的數(shù)組實現(xiàn)方法,結(jié)合實例形式分析了循環(huán)遍歷數(shù)組及正則匹配兩種實現(xiàn)技巧,需要的朋友可以參考下
    2016-12-12
  • 前端大文件分片MinIO上傳的詳細代碼

    前端大文件分片MinIO上傳的詳細代碼

    這篇文章主要給大家介紹了關(guān)于前端大文件分片MinIO上傳的詳細代碼,Minio支持分片上傳大文件,這個功能可以讓用戶將大文件劃分成小塊,然后在多個并行的HTTP請求中上傳這些小塊,從而提高上傳速度和穩(wěn)定性,需要的朋友可以參考下
    2024-09-09

最新評論

财经| 舞钢市| 隆昌县| 平和县| 府谷县| 靖边县| 措美县| 织金县| 娄烦县| 德江县| 漳浦县| 新田县| 霍林郭勒市| 游戏| 郁南县| 石台县| 乌拉特后旗| 松原市| 宁远县| 正阳县| 平果县| 贡嘎县| 延安市| 彭阳县| 阿克陶县| 辉南县| 黑龙江省| 遂川县| 固镇县| 澄江县| 曲阜市| 诸城市| 沙田区| 上高县| 都江堰市| 福泉市| 尉氏县| 滦南县| 十堰市| 双流县| 吉木萨尔县|