最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

javascript創(chuàng)建對(duì)象的幾種模式介紹_基礎(chǔ)知識(shí)

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:50:07
文檔

javascript創(chuàng)建對(duì)象的幾種模式介紹_基礎(chǔ)知識(shí)

javascript創(chuàng)建對(duì)象的幾種模式介紹_基礎(chǔ)知識(shí):在js中有幾種模式可以創(chuàng)建對(duì)象,通過對(duì)象操作所包含的屬性與方法。 一般來說,構(gòu)造函數(shù)名稱的第一個(gè)字母為大寫字母,非構(gòu)造函數(shù)名稱的第一個(gè)字母為小寫字母,當(dāng)然,構(gòu)造函數(shù)與一般函數(shù)唯一的區(qū)別只是調(diào)用的方式不同而已,所以任何函數(shù)只要通過new來調(diào)用,那它
推薦度:
導(dǎo)讀javascript創(chuàng)建對(duì)象的幾種模式介紹_基礎(chǔ)知識(shí):在js中有幾種模式可以創(chuàng)建對(duì)象,通過對(duì)象操作所包含的屬性與方法。 一般來說,構(gòu)造函數(shù)名稱的第一個(gè)字母為大寫字母,非構(gòu)造函數(shù)名稱的第一個(gè)字母為小寫字母,當(dāng)然,構(gòu)造函數(shù)與一般函數(shù)唯一的區(qū)別只是調(diào)用的方式不同而已,所以任何函數(shù)只要通過new來調(diào)用,那它
在js中有幾種模式可以創(chuàng)建對(duì)象,通過對(duì)象操作所包含的屬性與方法。

一般來說,構(gòu)造函數(shù)名稱的第一個(gè)字母為大寫字母,非構(gòu)造函數(shù)名稱的第一個(gè)字母為小寫字母,當(dāng)然,構(gòu)造函數(shù)與一般函數(shù)唯一的區(qū)別只是調(diào)用的方式不同而已,所以任何函數(shù)只要通過new來調(diào)用,那它就可以作為構(gòu)造函數(shù),若不通過new來調(diào)用,則與一般函數(shù)一樣。

談?wù)勎覍?duì)這幾種模式的理解:

工廠模式:創(chuàng)建一個(gè)一般函數(shù),在函數(shù)里創(chuàng)建一個(gè)Object對(duì)象,為這個(gè)對(duì)象增添屬性與方法,同時(shí)賦予其值,最后返回對(duì)象。無法識(shí)別對(duì)象類型。

構(gòu)造函數(shù)模式:創(chuàng)建構(gòu)造函數(shù),使用this來賦值,每當(dāng)創(chuàng)建一個(gè)實(shí)例時(shí),方法都被創(chuàng)建一次,而每個(gè)方法都執(zhí)行相同的命令,這就多余了。這個(gè)缺點(diǎn)可以通過將方法放到全局環(huán)境中,但是,這樣就沒有封裝性了。不過可以通過原型模式解決。

原型模式:每個(gè)函數(shù)都有一個(gè)prototype屬性,該屬性是一個(gè)指針,指向一個(gè)對(duì)象,該對(duì)象包含其函數(shù)創(chuàng)建的所有實(shí)例共享的屬性與方法。

原型對(duì)象,構(gòu)造函數(shù)以及實(shí)例之間的關(guān)系如下圖:

圖解:1:構(gòu)造函數(shù)以及由構(gòu)造函數(shù)創(chuàng)建的實(shí)例,它們的prototype屬性都指向構(gòu)造函數(shù)的原型對(duì)象。

2:構(gòu)造函數(shù)的原型對(duì)象具有constructor屬性,該屬性指向構(gòu)造函數(shù)。

3:構(gòu)造函數(shù)的原型對(duì)象所包含的所有屬性與方法可以被由構(gòu)造函數(shù)所創(chuàng)建的所有實(shí)例共享。

使用對(duì)象字面量重寫原型對(duì)象后,constructor則指向object構(gòu)造函數(shù),若需要其指向另一構(gòu)造函數(shù),則需修改原型對(duì)象的constructor屬性的值,比如:constructor:Person,這樣Person的原型對(duì)象即使被重寫,原型對(duì)象的constructor仍指向Person構(gòu)造函數(shù)。

當(dāng)先創(chuàng)建實(shí)例時(shí):若是直接添加屬性或方法,實(shí)例可以訪問。

若是重寫原型對(duì)象,則構(gòu)造函數(shù)的prototype指向新的原型對(duì)象,而之前創(chuàng)建的實(shí)例的prototype仍指向最初的原型對(duì)象,所以實(shí)例訪問不到新的原型對(duì)象的新屬性或和新方法。

原型對(duì)象包含的是共享的屬性與方法,那么每個(gè)實(shí)例都擁有這些信息,這樣實(shí)例之間就沒有什么不同了,而且還不可以傳參數(shù),這不是我們所想要的。每個(gè)實(shí)例之間有共同的信息,又有不同的信息,所以我們可以組合使用構(gòu)造函數(shù)模式與原型模式。

構(gòu)造函數(shù)模式與原型模式的組合使用:

態(tài)原型模式:將獨(dú)立的構(gòu)造函數(shù)與其原型對(duì)象結(jié)合在一起,在構(gòu)造函數(shù)里初始化原型,為其添加方法。

若該方法不存在,則將其添加到原型對(duì)象上,只在初始化原型時(shí)才執(zhí)行,而且只執(zhí)行一次。

寄生構(gòu)造函數(shù)模式:與工廠模式類似,區(qū)別為:寄生構(gòu)造函數(shù)模式為構(gòu)造函數(shù),通過new來創(chuàng)建實(shí)例。

穩(wěn)妥構(gòu)造函數(shù)模式:沒有公共的屬性,其方法不引用this的對(duì)象。創(chuàng)建實(shí)例時(shí)不使用new。只能通過方法訪問屬性(即傳入的數(shù)據(jù))。

以上這篇javascript創(chuàng)建對(duì)象的幾種模式介紹就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

javascript創(chuàng)建對(duì)象的幾種模式介紹_基礎(chǔ)知識(shí)

javascript創(chuàng)建對(duì)象的幾種模式介紹_基礎(chǔ)知識(shí):在js中有幾種模式可以創(chuàng)建對(duì)象,通過對(duì)象操作所包含的屬性與方法。 一般來說,構(gòu)造函數(shù)名稱的第一個(gè)字母為大寫字母,非構(gòu)造函數(shù)名稱的第一個(gè)字母為小寫字母,當(dāng)然,構(gòu)造函數(shù)與一般函數(shù)唯一的區(qū)別只是調(diào)用的方式不同而已,所以任何函數(shù)只要通過new來調(diào)用,那它
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top