javascript 將共享屬性遷移到原型中去的實(shí)現(xiàn)方法
當(dāng)我們用一個(gè)構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí),其屬性就會(huì)被添加到this中去。并且被添加到this中的屬性實(shí)際上不會(huì)隨著實(shí)體發(fā)生改變,這時(shí),我們這種做法顯得會(huì)很沒有效率。例如:
function her(){ this.name = 'Anna'; }
這意味著每次我們new her()創(chuàng)建一個(gè)實(shí)例對(duì)象的時(shí)候都會(huì)生成一個(gè)全新的name屬性,并在內(nèi)存中擁有屬于該屬性自己的存儲(chǔ)空間。而事實(shí)上,我們可以將name屬性添加到原型上去,這樣一來所有實(shí)例都可以共享這個(gè)name屬性了:
function her(){} her.prototype.name = 'Anna';
這樣一來,我們?cè)儆胣ew her()創(chuàng)建對(duì)象的時(shí)候,name屬性就不再是新對(duì)象的私有屬性了,而是被添加到該對(duì)象的原型中去了。雖然這種做法會(huì)很有效率,但這也是針對(duì)實(shí)例對(duì)象中的不可變屬性而言的,這是一定的不然的話改一下這個(gè)屬性,所有被創(chuàng)建的新對(duì)象的這個(gè)屬性都會(huì)被改變,這可不是我們想要的啊~~~。對(duì)象的公有屬性尤其適合這種方法。
下面,我們來改進(jìn)以前的一個(gè)例子:
function her(){}; her.prototype.name = 'Anna'; her.prototype.toString = function(){ return this.name; } function his(){}; his.prototype = new her(); his.prototype.constructor = his; his.prototype.sex = 'women';
如您所見,通常我們?cè)谶M(jìn)行原型對(duì)象擴(kuò)展之前,我們現(xiàn)完成了相關(guān)繼承工作的構(gòu)建,否則his.prototype中后續(xù)新的屬性方法有可能會(huì)抹掉繼承來的東西。
function child(f, m){ this.eat = f; this.don = m; } child.prototype = new his(); child.prototype.constructor = child; child.prototype.name = 'Jok'; child.prototype.fun = function(){ return this.eat + this.don }
如您所見,實(shí)際上調(diào)用toString()這個(gè)方法的區(qū)別僅僅在于幕后的少量操作。主要區(qū)別也就是屬性,方法的查找工作將更多地發(fā)生在her.prototype中。
以上這篇javascript 將共享屬性遷移到原型中去的實(shí)現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
用js統(tǒng)計(jì)用戶下載網(wǎng)頁所需時(shí)間的腳本
下面的方法是個(gè)不錯(cuò)的思路,建議對(duì)于js感興趣的朋友,推薦看2008-10-10身份證號(hào)碼前六位所代表的省,市,區(qū), 以及地區(qū)編碼下載
身份證號(hào)碼前六位所代表的省,市,區(qū), 以及地區(qū)編碼下載...2007-04-04JS代碼判斷IE6,IE7,IE8,IE9的函數(shù)代碼
JS代碼判斷瀏覽器版本,支持IE6,IE7,IE8,IE9!做網(wǎng)頁有時(shí)候會(huì)用到JS檢測IE的版本,下面是檢測Microsoft Internet Explorer版本的三種代碼2013-08-08JavaScript進(jìn)階之前端文件上傳和下載示例詳解
這篇文章主要為大家介紹了JavaScript進(jìn)階之前端文件上傳和下載示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09細(xì)數(shù)promise與async/await的使用及區(qū)別說明
這篇文章主要介紹了細(xì)數(shù)promise與async/await的使用及區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07原生JavaScript實(shí)現(xiàn)批量獲取表單數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何使用原生JavaScript實(shí)現(xiàn)批量獲取表單數(shù)據(jù),文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01bootstrap學(xué)習(xí)筆記之初識(shí)bootstrap
Bootstrap是一款目前非常流行的前端框架,簡單的說,就是html,css,javascript的工具集。本文給大家介紹bootstrap學(xué)習(xí)筆記之初識(shí)bootstrap,感興趣的朋友一起學(xué)習(xí)吧2016-06-06