Posted on 2008-04-24 14:21
沙漠中的魚 閱讀(238)
評(píng)論(0) 編輯 收藏 所屬分類:
javascript
JavaScript中基于prototype的繼承機(jī)制可以很好地工作,但是對(duì)于一些已經(jīng)習(xí)慣于C++和Java等語(yǔ)言中基于類的繼承機(jī)制的人來(lái)說(shuō),JavaScript的prototype繼承機(jī)制不是一種自然的編程方法。如果你不想用基于prototype的繼承,而想用一種基于類的繼承方法,那就繼續(xù)讀下去吧。
Netscape的Bob Clary[4]也提出了一個(gè)方法,它可以使一個(gè)對(duì)象使用一個(gè)通用的腳本從另一個(gè)對(duì)象繼承屬性和函數(shù)。這個(gè)腳本只是將“父”對(duì)象的屬性和函數(shù)簡(jiǎn)單地復(fù)制到“子”對(duì)象。為此,我們將說(shuō)明如何對(duì)腳本稍加修改,從而只是將子對(duì)象中不存在的屬性和函數(shù)復(fù)制到子對(duì)象;這樣一來(lái),子對(duì)象中的函數(shù)就能覆蓋父對(duì)象的函數(shù)。在兩個(gè)對(duì)象之間創(chuàng)建繼承關(guān)系的通用函數(shù)如下:
function createInheritance(parent, child) {
var property;
for(property in parent) {
if(!child[property]) {
child[property] = parent[property];
}
}
}
createInheritance函數(shù)有兩個(gè)參數(shù),父對(duì)象和子對(duì)象。這個(gè)函數(shù)只是迭代處理父對(duì)象的所有成員(成員就是屬性或函數(shù)),如果某個(gè)成員在子對(duì)象中不存在,則復(fù)制到子對(duì)象。
使用createInheritance函數(shù)相當(dāng)簡(jiǎn)單:首先創(chuàng)建子對(duì)象的一個(gè)實(shí)例,然后使用createInheritance函數(shù),為它傳遞子對(duì)象以及父對(duì)象的一個(gè)實(shí)例,如下:
var child = new Child();
createInheritance(new Parent(), child);
父對(duì)象中有而子對(duì)象中沒有的所有屬性和方法將復(fù)制到子對(duì)象。
引用:http://book.csdn.net/bookfiles/11/100117056.shtml