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

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

用JavaScript實(shí)現(xiàn)單繼承和多繼承的簡(jiǎn)單方法

2024-05-06 14:15:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
JavaScript就其本質(zhì)是函數(shù)式編程語(yǔ)言,是Lisp的后代,同時(shí)又加入了一下面向?qū)ο缶幊痰脑兀艞壛艘恍╇y懂的函數(shù)式語(yǔ)言的元素。

函數(shù)式編程語(yǔ)言可以實(shí)現(xiàn)面向?qū)ο缶幊?,這是毫無(wú)疑義的,Curry方法可以實(shí)現(xiàn)對(duì)類和對(duì)象的模擬。但是JavaScript提供了另一種實(shí)現(xiàn)OOP的方法:原型繼承。

因此,JavaScript實(shí)現(xiàn)面向?qū)ο缶幊毯鸵话愕暮瘮?shù)式編程語(yǔ)言還是有所區(qū)別的。

本文我將會(huì)給大家介紹JavaScript實(shí)現(xiàn)單繼承和多繼承的方法。

用原型實(shí)現(xiàn)單繼承:
有很多JavaScript庫(kù)提供了一些函數(shù)幫助實(shí)現(xiàn)單繼承。但實(shí)際上,JavaScript本身就提供了原型繼承的方法。因此,根本不需要提供特定的方法來(lái)實(shí)現(xiàn),簡(jiǎn)單使用JavaScript代碼就可以實(shí)現(xiàn)單繼承。

但是,JavaScript提供的原型繼承方法很容易犯錯(cuò),下面我給大家演示一下怎樣簡(jiǎn)潔明了地實(shí)現(xiàn)原型繼承。

假設(shè)MyB繼承MyA類,那么,代碼如下:

function MyA(){

if(MyA.prototype.baseClass!==undefined){

MyA.prototype.baseClass.call(this);

}

……一般代碼

}



function MyB(){

if(MyB.prototype.baseClass!==undefined){

MyB.prototype.baseClass.call(this);

}

……一般代碼

}

MyB.prototype=new MyA();

MyB.prototype.baseClass=MyB.prototype.constructor;//使用baseClass引用//基類的構(gòu)造器函數(shù)。

MyB.prototype.constructor=MyB;//恢復(fù)子類的構(gòu)造器屬性 用于未來(lái)通過(guò)這個(gè)屬性判//斷對(duì)象的類型。

var myA=new MyA();



var myB=new MyB();



上述javascript代碼中,我在每一個(gè)構(gòu)造函數(shù)中都添加了這么一段代碼:

if(ClassName.prototype.baseClass!==undefined){

ClassName.prototype.baseClass.call(this);

}

這段代碼尋找原型中的baseClass方法,如果有,就調(diào)用它。

在后面的原型繼承的實(shí)現(xiàn)中,我為子類創(chuàng)建了baseClass屬性,它的值是基類的構(gòu)造函數(shù)。因此,只要遵守我的方式編寫代碼,就可以保證基類的構(gòu)造函數(shù)在子類構(gòu)造實(shí)例時(shí)會(huì)得到執(zhí)行。

現(xiàn)在,如果MyA類又繼承了Base類,只需要添加3行原型繼承代碼即可:

MyA.prototype=new Base();

MyA.prototype.baseClass= MyA.prototype.constructor;//使用baseClass引用//基類的構(gòu)造器函數(shù)。

MyA.prototype.constructor= MyA;//恢復(fù)子類的構(gòu)造器屬性 用于未來(lái)通過(guò)這個(gè)屬性判//斷對(duì)象的類型。


不需要修改MyA類本身的代碼,MyA類及其子類MyB類的實(shí)例就都可以得到正確的執(zhí)行。

那些JavaScript庫(kù)實(shí)現(xiàn)的繼承,需要修改Object,Function等基類,容易引起沖突。還有一些方法,每一次實(shí)現(xiàn)繼承,都必須手工修改子類的構(gòu)造函數(shù),以使構(gòu)造函數(shù)能夠正確調(diào)用基類的構(gòu)造函數(shù)。


上面提供的方法編寫JavaScript代碼很好地解決了這些問(wèn)題。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 安顺市| 浦江县| 金秀| 凤阳县| 谢通门县| 佛教| 东乡县| 叙永县| 大英县| 赣榆县| 正宁县| 新丰县| 大邑县| 垦利县| 巴楚县| 建平县| 蒲江县| 达尔| 淅川县| 会宁县| 荆州市| 雅江县| 和政县| 万盛区| 平远县| 洪江市| 大姚县| 澄迈县| 浦北县| 务川| 安仁县| 新竹市| 道孚县| 印江| 太仆寺旗| 绍兴县| 沈丘县| 泗阳县| 霍州市| 枣阳市| 景德镇市|