日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java script创建对象_JavaScript七种非常经典的创建对象方式

發(fā)布時(shí)間:2025/3/11 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java script创建对象_JavaScript七种非常经典的创建对象方式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JavaScript創(chuàng)建對象的方式有很多,通過Object構(gòu)造函數(shù)或?qū)ο笞置媪康姆绞揭部梢詣?chuàng)建單個(gè)對象,顯然這兩種方式會(huì)產(chǎn)生大量的重復(fù)代碼,并不適合量產(chǎn)。接下來介紹七種非常經(jīng)典的創(chuàng)建對象的方式,他們也各有優(yōu)缺點(diǎn)。

一、工廠模式可以無數(shù)次調(diào)用這個(gè)工廠函數(shù),每次都會(huì)返回一個(gè)包含兩個(gè)屬性和一個(gè)方法的對象。工廠模式雖然解決了創(chuàng)建多個(gè)相似對象的問題,但是沒有解決對象識別問題,即不能知道一個(gè)對象的類型。

二、構(gòu)造函數(shù)模式?jīng)]有顯示的創(chuàng)建對象,使用new來調(diào)用這個(gè)構(gòu)造函數(shù),使用new后會(huì)自動(dòng)執(zhí)行如下操作:①創(chuàng)建一個(gè)新對象;②將構(gòu)造函數(shù)的作用域賦給新對象(因此this就指向了這個(gè)新對象);③執(zhí)行構(gòu)造函數(shù)中的代碼(為這個(gè)新對象添加屬性);④返回新對象。

缺點(diǎn):每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍。創(chuàng)建兩個(gè)完成同樣任務(wù)的的Function實(shí)例的卻沒有必要。況且有this對象在,根本不用在執(zhí)行代碼前就把函數(shù)綁定到特定的對象上,可以通過這樣的形式定義:

如此一來,就可以將sayName()函數(shù)的定義轉(zhuǎn)移到構(gòu)造函數(shù)外部。而在構(gòu)造函數(shù)內(nèi)部,我們將sayName屬性設(shè)置成全局的sayName函數(shù)。這樣的話,由于sayName包含的是一個(gè)指向函數(shù)的指針,因此person1和person2對象就可以共享在全局作用域中定義的同一個(gè)sayName()函數(shù)。這樣做解決了兩個(gè)函數(shù)做同一件事的問題,但是新的問題又來了:在全局作用域中定義的函數(shù)實(shí)際上只能被某個(gè)對象調(diào)用,這讓全局作用域有點(diǎn)名不副實(shí)。而更重要的是:如果對象需要定義很多方法,那么就需要定義很多個(gè)全局函數(shù),這樣一來,我們自定義的這個(gè)引用類型就毫無封裝性可言了。

三、原型模式將信息直接添加到原型對象上。使用原型的好處是可以讓所有的實(shí)例對象共享它所包含的屬性和方法,不必在構(gòu)造函數(shù)中定義對象實(shí)例信息,而是可以將這些信息直接添加到原型對象中。

①理解原型無論什么時(shí)候,只要?jiǎng)?chuàng)建了一個(gè)新函數(shù),就會(huì)根據(jù)一組特定的規(guī)則為該函數(shù)創(chuàng)建一個(gè)prototype屬性。在默認(rèn)情況下,所有prototype屬性都會(huì)自動(dòng)獲得一個(gè)constructor(構(gòu)造函數(shù))屬性,這個(gè)屬性包含一個(gè)指向prototype屬性所在函數(shù)的指針。每當(dāng)代碼讀取某個(gè)對象的某個(gè)屬性時(shí),都會(huì)執(zhí)行一搜索,目標(biāo)是具有給定名字的屬性。搜索首先從對象實(shí)例本身開始。如果在實(shí)例中找到了具有給定名字的屬性,則返回該屬性的值;如果沒有找到,則繼續(xù)搜索指針指向的原型對象,在原型對象中查找具有給定名字的屬性。如果在原型對象中找到了這個(gè)屬性,則返回該屬性的值。雖然可以通過對象實(shí)例訪問保存在原型中的值,但卻不能通過對象實(shí)例重寫原型中的值。如果我們在實(shí)例中添加了一個(gè)屬性,而該屬性與實(shí)例中的一個(gè)屬性同名,那么就會(huì)在實(shí)例中創(chuàng)建該屬性,該屬性將會(huì)屏蔽原型中的那個(gè)屬性。即使是將屬性設(shè)置為null,也只是在實(shí)例中的屬性值為null。不過,使用delete操作符可以完全刪除實(shí)例屬性,從而能夠重新訪問原型中的屬性。使用hasOwnProperty()方法可以檢測一個(gè)屬性是存在于實(shí)例中,還是存在與原型中。這個(gè)方法只在給定屬性存在于對象實(shí)例中時(shí),才會(huì)返回true。

②原型與in操作符in操作符會(huì)在通過對象能夠訪問給定屬性時(shí)返回true,無論該屬性是存在于實(shí)例中還是原型中。③更簡單的原型語法

在上面的代碼中,將Person.prototype設(shè)置為等于一個(gè)以對象字面量形式創(chuàng)建的新對象。最終結(jié)果相同,但有一個(gè)例外:constructor屬性不再指向Person。

四、組合使用構(gòu)造函數(shù)模式和原型模式是使用最為廣泛、認(rèn)同度最高的一種創(chuàng)建自定義類型的方法。它可以解決上面那些模式的缺點(diǎn),使用此模式可以讓每個(gè)實(shí)例都會(huì)有自己的一份實(shí)例屬性副本,但同時(shí)又共享著對方法的引用,這樣的話,即使實(shí)例屬性修改引用類型的值,也不會(huì)影響其他實(shí)例的屬性值了。還支持向構(gòu)造函數(shù)傳遞參數(shù),可謂是集兩種模式的優(yōu)點(diǎn)。

五、動(dòng)態(tài)原型模式將所有信息都封裝在了構(gòu)造函數(shù)中,初始化的時(shí)候。可以通過檢測某個(gè)應(yīng)該存在的方法是否有效,來決定是否需要初始化原型。

只有在sayName方法不存在的時(shí)候,才會(huì)將它添加到原型中。這段代碼只會(huì)初次調(diào)用構(gòu)造函數(shù)的時(shí)候才會(huì)執(zhí)行。此后原型已經(jīng)完成初始化,不需要在做什么修改了,這里對原型所做的修改,能夠立即在所有實(shí)例中得到反映。其次,if語句檢查的可以是初始化之后應(yīng)該存在的任何屬性或方法,所以不必用一大堆的if語句檢查每一個(gè)屬性和方法,只要檢查一個(gè)就行。

六、寄生構(gòu)造函數(shù)模式的基本思想就是創(chuàng)建一個(gè)函數(shù),該函數(shù)的作用僅僅是封裝創(chuàng)建對象的代碼,然后再返回新建的對象除了使用new操作符并把使用的包裝函數(shù)叫做構(gòu)造函數(shù)之外,和工廠模式幾乎一樣。構(gòu)造函數(shù)如果不返回對象,默認(rèn)也會(huì)返回一個(gè)新的對象,通過在構(gòu)造函數(shù)的末尾添加一個(gè)return語句,可以重寫調(diào)用構(gòu)造函數(shù)時(shí)返回的值。

七、穩(wěn)妥構(gòu)造函數(shù)模式首先明白穩(wěn)妥對象指的是沒有公共屬性,而且其方法也不引用this。穩(wěn)妥對象最適合在一些安全環(huán)境中(這些環(huán)境會(huì)禁止使用this和new),或防止數(shù)據(jù)被其他應(yīng)用程序改動(dòng)時(shí)使用。穩(wěn)妥構(gòu)造函數(shù)模式和寄生模式類似,有兩點(diǎn)不同:1.是創(chuàng)建對象的實(shí)例方法不引用this;2.不使用new操作符調(diào)用構(gòu)造函數(shù)

跟寄生構(gòu)造函數(shù)模式一樣,這樣創(chuàng)建出來的對象與構(gòu)造函數(shù)之間沒有什么關(guān)系,instanceof操作符對他們沒有意義。

總結(jié)

以上是生活随笔為你收集整理的java script创建对象_JavaScript七种非常经典的创建对象方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲视频大全 | 欧美日韩一区二区在线观看视频 | 久久久久亚洲av无码专区体验 | 人妖和人妖互交性xxxx视频 | 天堂国产一区二区三区 | 正在播放国产精品 | 午夜一区二区视频 | 91精品国产一区二区三区蜜臀 | 怎么可能高潮了就结束漫画 | 亚洲精品乱码久久久久99 | 牛牛影视一区二区 | 中文字幕视频在线播放 | 欧美精品激情视频 | 手机在线看片你懂的 | 年代下乡啪啪h文 | 在线播放日韩av | 在线免费看黄色片 | 一区二区三区在线观看免费视频 | 欧美成一区二区三区 | 久久高清无码视频 | 深爱五月激情网 | 欧美日韩不卡在线 | 美女露出粉嫩尿囗让男人桶 | 久久久久久国产精品免费免费 | 丰满少妇一区二区三区专区 | 毛片网在线观看 | 中文字幕免费观看视频 | 久久久一区二区 | 人人澡人人爽 | 在线观看国产欧美 | 亚洲免费av在线 | 天天想你在线观看完整版电影高清 | 日韩中出在线 | 国产91绿帽单男绿奴 | 久久久久午夜 | 日本xxxwww | 相亲对象是问题学生在线观看 | 看免费毛片 | 色天天| 欧美草b | 天天想你在线观看完整版高清 | 性少妇videosexfreexxx片 | 日韩三级大片 | 亚洲国产福利 | 日本a在线天堂 | 午夜一级黄色片 | 免费黄色av网站 | 狠狠婷 | 熟妇人妻久久中文字幕 | 亚洲一区播放 | 久久青娱乐| 国产一区二区三区免费播放 | 欧美a在线观看 | 动漫美女隐私无遮挡 | 久久成人精品视频 | 美女视频黄色免费 | 欧美不卡一区二区三区 | 色哟哟免费视频 | 成年人免费网址 | 欧色丰满女同hd | 中文亚洲av片在线观看 | 越南a级片| 国偷自产视频一区二区久 | 久久亚洲精品无码va白人极品 | 日本老师巨大bbw丰满 | 狂野欧美性猛交xxxx巴西 | 欧美手机在线视频 | 农村妇女毛片精品久久久 | 日本一区二区三区视频在线 | 国产理论片| 一道本久在线中文字幕 | 日本爽爽爽 | 九九热播视频 | 亚洲自拍偷拍在线 | 国产一级在线播放 | 日韩午夜在线 | 国产精品一区二区人人爽 | 天堂无乱码 | 免费av资源 | 欧美中文字幕一区二区 | 欧美人xxx | 精品国产视频在线 | 97青草| 一区二区中文 | 国产免费一级视频 | 久久人体视频 | 日韩tv | 国产成人精品无码免费看81 | 国产永久av| 亚洲精品久久久久久久蜜桃 | 日韩黄色av网站 | 日韩成人小视频 | 久久精品久久久久 | 亚欧三级| 麻豆精品国产传媒av绿帽社 | 久久久久久久一区二区三区 | 亚洲无码精品免费 | 日日夜夜免费 | 亚洲视频在线免费 |