JavaScript學(xué)習(xí)筆記:創(chuàng)建自定義對(duì)象

      網(wǎng)友投稿 764 2025-03-31

      文章目錄

      一、利用構(gòu)造函數(shù)模式創(chuàng)建自定義對(duì)象

      二、采用原型模式創(chuàng)建自定義對(duì)象

      三、采用混合模式創(chuàng)建自定義對(duì)象

      四、采用動(dòng)態(tài)原型模式創(chuàng)建自定義對(duì)象

      一、利用構(gòu)造函數(shù)模式創(chuàng)建自定義對(duì)象

      使用構(gòu)造函數(shù)可以創(chuàng)建特定類(lèi)型的對(duì)象,類(lèi)似于Array、Date等原生javaScript對(duì)象。

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      構(gòu)造函數(shù)雖然好用,但也并非沒(méi)有缺點(diǎn),使用構(gòu)造函數(shù)的最大的問(wèn)題在于每次創(chuàng)建實(shí)例的時(shí)候都要重新創(chuàng)建一次方法(理論上每次創(chuàng)建對(duì)象的時(shí)候?qū)ο蟮膶傩跃煌鴮?duì)象的方法是相同的),也就是說(shuō),構(gòu)造函數(shù)內(nèi)的方法是與對(duì)象綁定的。因此p1.say == p2.say結(jié)果是false。

      二、采用原型模式創(chuàng)建自定義對(duì)象

      創(chuàng)建的每個(gè)函數(shù)都有prototype(原型)屬性,這個(gè)屬性會(huì)被對(duì)象副本所繼承,這樣創(chuàng)建新對(duì)象時(shí)不用重復(fù)已有的屬性、方法,節(jié)省了內(nèi)存空間。使用原型對(duì)象的好處就是可以讓所有對(duì)象實(shí)例共享它所包含的屬性及方法。

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      可以看到,雖然構(gòu)造函數(shù)內(nèi)沒(méi)有聲明say方法,但我們創(chuàng)建的對(duì)象p1還是能調(diào)用say方法,這是因?yàn)?a target="_blank" href="http://m.bai1xia.com/news/tags-1107.html"style="font-weight:bold;">javaScript有一個(gè)搜索規(guī)則,先搜索實(shí)例屬性和方法,找到則返回;如果沒(méi)找到,則再到prototype中去搜索。因此沒(méi)有污染全局作用域。

      原型模式省略了構(gòu)造函數(shù)傳遞初始化參數(shù)這一環(huán)節(jié),結(jié)果所有實(shí)例在默認(rèn)情況下都取得了相同的屬性值,這樣非常不方便,但這還不是原型的最大問(wèn)題,原型模式的最大問(wèn)題在于共享的本性所導(dǎo)致的,由于共享,因此一個(gè)實(shí)例修改了引用,另一個(gè)也隨之更改了引用。因此通常不單獨(dú)使用原型,而是結(jié)合原型模式與構(gòu)造函數(shù)模式。

      三、采用混合模式創(chuàng)建自定義對(duì)象

      1

      2

      3

      4

      5

      6

      7

      8

      9

      JavaScript學(xué)習(xí)筆記:創(chuàng)建自定義對(duì)象

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      混合模式中構(gòu)造函數(shù)模式用于定義實(shí)例屬性,而原型模式用于定義方法和共享屬性。每個(gè)實(shí)例都會(huì)有自己的一份實(shí)例屬性,但同時(shí)又共享著方法,最大限度的節(jié)省了內(nèi)存。示例中因?yàn)橹粍?chuàng)建say()函數(shù)的一個(gè)實(shí)例,所以沒(méi)有內(nèi)存浪費(fèi)。另外這種模式還支持傳遞初始參數(shù)。優(yōu)點(diǎn)甚多。這種模式在ECMAScript中是使用最廣泛、認(rèn)同度最高的一種創(chuàng)建自定義對(duì)象的方法。所有的非函數(shù)屬性都由構(gòu)造函數(shù)創(chuàng)建,意味著又可用構(gòu)造函數(shù)的參數(shù)賦予屬性默認(rèn)值了。

      四、采用動(dòng)態(tài)原型模式創(chuàng)建自定義對(duì)象

      面向?qū)ο缶幊?/a>經(jīng)驗(yàn)的開(kāi)發(fā)人員可能會(huì)覺(jué)得將prototype的聲明放在構(gòu)造函數(shù)外面有點(diǎn)別扭,動(dòng)態(tài)原型模式可以實(shí)現(xiàn)方法放到構(gòu)造函數(shù)里去。

      動(dòng)態(tài)原型方法的基本想法與混合的構(gòu)造函數(shù)/原型方式相同,即在構(gòu)造函數(shù)內(nèi)定義非函數(shù)屬性,而函數(shù)屬性則利用原型屬性定義。唯一的區(qū)別是賦予對(duì)象方法的位置。

      動(dòng)態(tài)原型模式將所有信息封裝在了構(gòu)造函數(shù)中,而通過(guò)構(gòu)造函數(shù)中初始化原型(僅第一個(gè)對(duì)象實(shí)例化時(shí)初始化原型),這個(gè)可以通過(guò)判斷該方法是否有效而選擇是否需要初始化原型。即先判斷原型中的某個(gè)屬性或方法是不是已經(jīng)聲明過(guò),如果沒(méi)有聲明,則聲明整個(gè)原型;否則,什么也不用做。

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      可以看到上例中只輸出一次executed only once...,即當(dāng)p1初始化后,p2就不再需要初始化原型。

      如前所述,目前使用最廣泛的是混合的構(gòu)造函數(shù)/原型方式。些外,動(dòng)態(tài)原型方法也很流行,在功能上與前者等價(jià),可以采用這兩種方式中的任何一種。

      JavaScript

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:創(chuàng)建Excel動(dòng)態(tài)數(shù)據(jù)透視表來(lái)解決新增數(shù)據(jù)在數(shù)據(jù)透視表中實(shí)時(shí)顯示(創(chuàng)建數(shù)據(jù)透視表窗體)
      下一篇:什么是API管理?定義和要求清單
      相關(guān)文章
      亚洲国产香蕉人人爽成AV片久久 | 亚洲欧洲中文日韩av乱码| 亚洲av伊人久久综合密臀性色| jizzjizz亚洲日本少妇| 亚洲专区先锋影音| 亚洲动漫精品无码av天堂| 中文字幕久久亚洲一区| 亚洲精品久久久www| 国产成人va亚洲电影| 久久精品国产亚洲av瑜伽| 亚洲成a∨人片在无码2023| 亚洲 日韩 色 图网站| 久久亚洲最大成人网4438 | 亚洲AV日韩AV永久无码色欲| 亚洲欧美自偷自拍另类视| 一本色道久久88—综合亚洲精品 | 最新亚洲人成网站在线观看| 亚洲精品av无码喷奶水糖心| 亚洲另类自拍丝袜第五页| 亚洲欧美国产国产一区二区三区 | 91在线精品亚洲一区二区| 久久久久久亚洲精品成人| 久久久久久亚洲精品成人| 亚洲综合色一区二区三区小说| 亚洲图片一区二区| 精品亚洲麻豆1区2区3区| 77777_亚洲午夜久久多人| 亚洲第一区视频在线观看| 亚洲婷婷在线视频| 亚洲一级毛片中文字幕| 亚洲中文字幕日本无线码| 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲日韩精品国产3区| 亚洲av无码一区二区三区四区| 亚洲a∨国产av综合av下载| gogo全球高清大胆亚洲| 亚洲av午夜成人片精品电影| 亚洲综合精品网站| 国产亚洲精品观看91在线| 亚洲成a人片77777老司机| 亚洲理论片在线观看|