javascript中的對(duì)象和原型(三)

javascript中的對(duì)象和原型(三)

ID:10755533

大小:59.12 KB

頁數(shù):5頁

時(shí)間:2018-07-08

javascript中的對(duì)象和原型(三)_第1頁
javascript中的對(duì)象和原型(三)_第2頁
javascript中的對(duì)象和原型(三)_第3頁
javascript中的對(duì)象和原型(三)_第4頁
javascript中的對(duì)象和原型(三)_第5頁
資源描述:

《javascript中的對(duì)象和原型(三)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、Javascript中的對(duì)象和原型(三)作者:?念在三角湖畔??來源:?博客園??發(fā)布時(shí)間:2012-05-3110:39??閱讀:29次??原文鏈接???全屏閱讀 ?[收藏]??  在Javascript中的對(duì)象和原型(二)中我們提到,用構(gòu)造函數(shù)創(chuàng)建的對(duì)象里面,每個(gè)對(duì)象之間都是獨(dú)立的,這樣就會(huì)降低系統(tǒng)資源的利用率,解決這樣問題,我們就要用到下面提到的原型對(duì)象?! ∫辉蛯?duì)象  原型對(duì)象實(shí)際上就是構(gòu)造函數(shù)的一個(gè)實(shí)例對(duì)象,和普通的實(shí)例對(duì)象沒有本質(zhì)上的區(qū)別??梢园囟愋偷乃袑?shí)例的共享屬性或者方法。這樣,如果我們需要修改所有實(shí)例中的屬性或者方法,就只需要修改一

2、處,就能夠影響到所有實(shí)例了。因?yàn)樵椭械膶傩院头椒ㄊ枪蚕淼?。我們可以看下兩個(gè)圖示:???構(gòu)造函數(shù)方式原型模式方式  從上面的圖示中我們就不難看出,為何下面的代碼中"user1.show==user2.show;"返回的是ture,因?yàn)閟how方法是所有由User構(gòu)造函數(shù)創(chuàng)建的對(duì)象所共享的,而不是每個(gè)對(duì)象都各自創(chuàng)建了一個(gè)show方法。每個(gè)JavaScript函數(shù)都有prototype屬性,這個(gè)屬性引用了一個(gè)對(duì)象,這個(gè)對(duì)象就是原型對(duì)象。原型對(duì)象初始化的時(shí)候是空的,我們可以在里面自定義任何屬性和方法,這些方法和屬性都將被該構(gòu)造函數(shù)所創(chuàng)建的對(duì)象繼承。Prototype

3、,這個(gè)屬性引用了一個(gè)對(duì)象,它又有一個(gè)屬性,constructor,它的值是一個(gè)函數(shù)對(duì)象。  在原型中添加屬性和方法可以參照如下代碼:functionUser(name,age){//構(gòu)造方法this.name=name;//對(duì)象屬性this.age=age;}User.prototype.addr='湖北武漢';//在原型中添加屬性User.prototype.show=function(){//在原型中添加方法alert(this.name+'

4、'+this.age);};varuser1=newUser('ZXC',22);//創(chuàng)建實(shí)例varuser2=n

5、ewUser('CXZ',21);user1.show();//調(diào)用show()方法user2.show();alert(user1.show==user2.show);//返回true說明show方法是共享的alert(user1.addr);//'湖北武漢'alert(user2.addr);//'湖北武漢'  但是有個(gè)問題是:如果我們既在構(gòu)造方法中添加了一個(gè)屬性、又在原型中添加了該屬性,還在實(shí)例中添加了該屬性,那么我們?cè)L問的究竟是哪一個(gè)屬性呢?我們先看看下面的代碼:functionUser(name,age){//構(gòu)造方法this.name=name;/

6、/對(duì)象屬性this.age=age;this.addr='湖北恩施';}User.prototype.addr='湖北武漢';//在原型中添加屬性varuser1=newUser('ZXC',22);//創(chuàng)建實(shí)例varuser2=newUser('CXZ',21);alert(user1.addr);//'湖北恩施'deleteuser1.addr;//刪除對(duì)象屬性alert(user1.addr);//'湖北武漢'deleteUser.prototype.addr;alert(user1.addr);//'undefined'user2.addr='武漢';

7、alert(user2.addr);//'武漢'  從上面的代碼可以看出,如果我們同時(shí)申明了對(duì)象屬性、原型屬性和實(shí)例屬性,那么調(diào)用時(shí)顯示的優(yōu)先級(jí)應(yīng)該是:實(shí)例屬性>對(duì)象屬性>原型屬性。這就是采用了就近原則:調(diào)用時(shí)首先查找實(shí)例中是否直接定義了這個(gè)屬性,有則返回實(shí)例屬性;如果實(shí)例屬性中沒有就去構(gòu)造函數(shù)中查找,有則返回;如果前面兩者都沒有就去原型對(duì)象中查找,如果沒有則返回undefined?! 《?dòng)態(tài)原型模式  有人可能會(huì)覺得上面代碼中的寫法感覺很別扭,因?yàn)樵椭械姆椒ê蛯傩耘c構(gòu)造函數(shù)中定義的對(duì)象屬性和方法不在一塊兒,要是能封裝在一起就更加直觀,如果要解決這個(gè)問題,就

8、要用到動(dòng)態(tài)原型模式;//動(dòng)態(tài)原型模式functionUser(name,age){//構(gòu)造方法this.name=name;//屬性this.age=age;this.addr='湖北恩施';User.prototype.addr='湖北武漢';//在原型中添加屬性User.prototype.show=function(){//在原型中添加方法alert(this.name+'

9、'+this.age+'

10、'+this.addr);};}varuser1=newUser('ZXC',22);//創(chuàng)建實(shí)例varuser2=newUser('CXZ',21);us

11、er1.show();//調(diào)用show

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。