javascript中的prototype原型學(xué)習(xí)指南_基礎(chǔ)知識

javascript中的prototype原型學(xué)習(xí)指南_基礎(chǔ)知識

ID:30777745

大?。?24.11 KB

頁數(shù):9頁

時(shí)間:2019-01-03

javascript中的prototype原型學(xué)習(xí)指南_基礎(chǔ)知識_第1頁
javascript中的prototype原型學(xué)習(xí)指南_基礎(chǔ)知識_第2頁
javascript中的prototype原型學(xué)習(xí)指南_基礎(chǔ)知識_第3頁
javascript中的prototype原型學(xué)習(xí)指南_基礎(chǔ)知識_第4頁
javascript中的prototype原型學(xué)習(xí)指南_基礎(chǔ)知識_第5頁
資源描述:

《javascript中的prototype原型學(xué)習(xí)指南_基礎(chǔ)知識》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、JavaScript中的prototype原型學(xué)習(xí)指原型是什么Function類型有一個(gè)屈性prototype,直接翻譯過來就是原型。這個(gè)屈性就是一個(gè)指針,指向一個(gè)對彖,這個(gè)對象包含一些屈性和方法,這些屈性和方法會(huì)被當(dāng)前函數(shù)生成的所有實(shí)例(對彖)所共享。這句話根據(jù)前面所說的,細(xì)細(xì)琢磨下來,就可以得到下面代碼:functionPerson(){???}Person.prototype={country:'china',sayName:function(){???}}先創(chuàng)建了一個(gè)Function類型的實(shí)例person,然后person的方法p

2、rototype是一個(gè)對象,就聲明指向了一個(gè)對象。這個(gè)對象里面的展性和方法,會(huì)被當(dāng)前person函數(shù)生成的實(shí)例所共享。也就是說:personl二newPerson();person2二newPerson();pcrsonl和pcrson2都是通過Person這個(gè)Function類型實(shí)例,再次生成的實(shí)例,它們倆都有共同的屬性country和方法sayName,因?yàn)樗鼈兌加心硞€(gè)指針(—proto_),直接指向Person,prototype所指向的對象。不過要注意—proto_這個(gè)指針是不標(biāo)準(zhǔn)的,只有Chrome和Firefox等瀏覽器自己定

3、義的,實(shí)際中,也不會(huì)用到這個(gè)屬性,只是作為理解prototype來用:>personl._proto_?Object{country:usajdflja11,sayName:function}>person2._proto_?Object{country:ltsajdflja11,sayName:function}>personl._proto_==person2._proto_true>personl._proto_==Person.prototypetrue>關(guān)于原型等用法,后面會(huì)更具體的講到。創(chuàng)建對象的模式卜?面,我們就來看卜?創(chuàng)建

4、對象的方法和常用模式,以及它們Z間的優(yōu)缺點(diǎn)。1.工廠模式就像工廠一樣,抽彖了創(chuàng)建具體對象的過程,用函數(shù)來封裝以特定接口創(chuàng)建對象的細(xì)節(jié)。通過使用函數(shù)代替部分重復(fù)工作,代碼如下:functioncrcatcPcrson(name,age,job){varo=newObject();o.name=name;o.age二age;o.job二job;o.sayNamc=function(){alert(this?name);};returno;}varpersonl=crcatcPcrson(,zjiangshui","22","cnginccr〃

5、);這樣就創(chuàng)建岀來了一個(gè)人,工廠模式解決了多個(gè)相似對象重復(fù)創(chuàng)建問題,但是沒有解決對象識別問題。只是單純的創(chuàng)建了一個(gè)對象,而不管這個(gè)對象是從人類模版還是動(dòng)物模版創(chuàng)建的,無法區(qū)分這個(gè)對象的類型。2.構(gòu)造函數(shù)模式創(chuàng)建一個(gè)口定義的構(gòu)造函數(shù),從而定義口定義對象類型的屈性和方法。functionPerson(name,age,job){this.name二name;this.age二age;this?job=jpb;this?sayNamc=function(){alert(this?name);};};varpersonl二newPerson(..

6、.);1.構(gòu)造函數(shù)模式與工廠模式區(qū)別:?沒有顯式的創(chuàng)建對象。?肓接將屬性和方法賦值this對象。?沒有return語句。Person是Function類型的對象,new之后,會(huì)繼續(xù)產(chǎn)生一個(gè)對象,但這個(gè)新產(chǎn)生的對象,由于在函數(shù)中傳遞進(jìn)去參數(shù),并賦值給了this指針,那么傳遞進(jìn)去的內(nèi)容,就變成了新產(chǎn)生對彖的屈性或方法。構(gòu)造函數(shù)默認(rèn)習(xí)慣是首字母大寫,上面代碼執(zhí)行經(jīng)丿力了下面兒個(gè)步驟:?創(chuàng)建一個(gè)新對象?將構(gòu)造函數(shù)作用域賦值給新對彖?執(zhí)行構(gòu)造函數(shù)中的代碼?返回新對象這樣生成的實(shí)例中,都默認(rèn)包含一個(gè)constructor屬性指向構(gòu)造函數(shù),例如:ale

7、rt(personl.constructor==Person);所以用構(gòu)造函數(shù)模式,冇類型的區(qū)分,可以將它的實(shí)例標(biāo)識為一種特定的類型。此外,構(gòu)造函數(shù)就是普通的函數(shù),因?yàn)橐答伒玫叫聦﹀?,所以用new來調(diào)用。如果不用的話,直接執(zhí)行就跟普通函數(shù)一樣,例如上面,執(zhí)行Person.sayName()會(huì)彈出window,name,因?yàn)楹瘮?shù)在window下面執(zhí)行,所以this指向window。構(gòu)造函數(shù)模式也是有缺陷的,構(gòu)造函數(shù)模式里面的方法,在每個(gè)實(shí)例上都重新創(chuàng)建了一遍,因此不同實(shí)例上的同名函數(shù)是不相等的。例如:personl.sayName==pe

8、rson2.sayName;//false也就是說,由構(gòu)造函數(shù)生成的每個(gè)對彖實(shí)例,屈性和方法都是獨(dú)冇的,都是復(fù)制了一遍。屬性獨(dú)有是必須的,因?yàn)檫@正是對象之間不同的地方,但是很多方法功能和代碼都

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

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

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(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)完成后未能成功下載的用戶請聯(lián)系客服處理。