javascript創(chuàng)建對象的幾種模式介紹
在js中有幾種模式可以創(chuàng)建對象,通過對象操作所包含的屬性與方法。
一般來說,構造函數(shù)名稱的第一個字母為大寫字母,非構造函數(shù)名稱的第一個字母為小寫字母,當然,構造函數(shù)與一般函數(shù)唯一的區(qū)別只是調(diào)用的方式不同而已,所以任何函數(shù)只要通過new來調(diào)用,那它就可以作為構造函數(shù),若不通過new來調(diào)用,則與一般函數(shù)一樣。
談談我對這幾種模式的理解:
工廠模式:創(chuàng)建一個一般函數(shù),在函數(shù)里創(chuàng)建一個Object對象,為這個對象增添屬性與方法,同時賦予其值,最后返回對象。無法識別對象類型。
構造函數(shù)模式:創(chuàng)建構造函數(shù),使用this來賦值,每當創(chuàng)建一個實例時,方法都被創(chuàng)建一次,而每個方法都執(zhí)行相同的命令,這就多余了。這個缺點可以通過將方法放到全局環(huán)境中,但是,這樣就沒有封裝性了。不過可以通過原型模式解決。
原型模式:每個函數(shù)都有一個prototype屬性,該屬性是一個指針,指向一個對象,該對象包含其函數(shù)創(chuàng)建的所有實例共享的屬性與方法。
原型對象,構造函數(shù)以及實例之間的關系如下圖:
圖解:1:構造函數(shù)以及由構造函數(shù)創(chuàng)建的實例,它們的prototype屬性都指向構造函數(shù)的原型對象。
2:構造函數(shù)的原型對象具有constructor屬性,該屬性指向構造函數(shù)。
3:構造函數(shù)的原型對象所包含的所有屬性與方法可以被由構造函數(shù)所創(chuàng)建的所有實例共享。
使用對象字面量重寫原型對象后,constructor則指向object構造函數(shù),若需要其指向另一構造函數(shù),則需修改原型對象的constructor屬性的值,比如:constructor:Person,這樣Person的原型對象即使被重寫,原型對象的constructor仍指向Person構造函數(shù)。
當先創(chuàng)建實例時:若是直接添加屬性或方法,實例可以訪問。
若是重寫原型對象,則構造函數(shù)的prototype指向新的原型對象,而之前創(chuàng)建的實例的prototype仍指向最初的原型對象,所以實例訪問不到新的原型對象的新屬性或和新方法。
原型對象包含的是共享的屬性與方法,那么每個實例都擁有這些信息,這樣實例之間就沒有什么不同了,而且還不可以傳參數(shù),這不是我們所想要的。每個實例之間有共同的信息,又有不同的信息,所以我們可以組合使用構造函數(shù)模式與原型模式。
構造函數(shù)模式與原型模式的組合使用:
態(tài)原型模式:將獨立的構造函數(shù)與其原型對象結合在一起,在構造函數(shù)里初始化原型,為其添加方法。
若該方法不存在,則將其添加到原型對象上,只在初始化原型時才執(zhí)行,而且只執(zhí)行一次。
寄生構造函數(shù)模式:與工廠模式類似,區(qū)別為:寄生構造函數(shù)模式為構造函數(shù),通過new來創(chuàng)建實例。
穩(wěn)妥構造函數(shù)模式:沒有公共的屬性,其方法不引用this的對象。創(chuàng)建實例時不使用new。只能通過方法訪問屬性(即傳入的數(shù)據(jù))。
以上這篇javascript創(chuàng)建對象的幾種模式介紹就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- js面向對象之常見創(chuàng)建對象的幾種方式(工廠模式、構造函數(shù)模式、原型模式)
- JavaScript中創(chuàng)建對象的7種模式詳解
- JavaScript中創(chuàng)建對象的模式匯總
- js 創(chuàng)建對象 經(jīng)典模式全面了解
- JavaScript創(chuàng)建對象方式總結【工廠模式、構造函數(shù)模式、原型模式等】
- javascript工廠模式和構造函數(shù)模式創(chuàng)建對象方法解析
- 在javascript中創(chuàng)建對象的各種模式解析
- 淺析在javascript中創(chuàng)建對象的各種模式
- JavaScript創(chuàng)建對象的四種常用模式實例分析
- JS 創(chuàng)建對象的模式實例小結
相關文章
javascript 基礎篇2 數(shù)據(jù)類型,語句,函數(shù)
文章里如果有錯誤的話,希望能幫忙指正~我也是邊看視頻邊學習中,這個算是個筆記吧~自認為總結出來的東西比看視頻要節(jié)省點時間~能幫到別人最好了~幫不到也起碼恩能幫到我自己2012-03-03Javascript中Array.prototype.map()詳解
map 方法會給原數(shù)組中的每個元素都按順序調(diào)用一次 callback 函數(shù)。callback 每次執(zhí)行后的返回值組合起來形成一個新數(shù)組。 callback 函數(shù)只會在有值的索引上被調(diào)用;那些從來沒被賦過值或者使用 delete 刪除的索引則不會被調(diào)用。2014-10-10