javascript 將共享屬性遷移到原型中去的實現(xiàn)方法
當我們用一個構造函數(shù)創(chuàng)建對象時,其屬性就會被添加到this中去。并且被添加到this中的屬性實際上不會隨著實體發(fā)生改變,這時,我們這種做法顯得會很沒有效率。例如:
function her(){ this.name = 'Anna'; }
這意味著每次我們new her()創(chuàng)建一個實例對象的時候都會生成一個全新的name屬性,并在內存中擁有屬于該屬性自己的存儲空間。而事實上,我們可以將name屬性添加到原型上去,這樣一來所有實例都可以共享這個name屬性了:
function her(){} her.prototype.name = 'Anna';
這樣一來,我們再用new her()創(chuàng)建對象的時候,name屬性就不再是新對象的私有屬性了,而是被添加到該對象的原型中去了。雖然這種做法會很有效率,但這也是針對實例對象中的不可變屬性而言的,這是一定的不然的話改一下這個屬性,所有被創(chuàng)建的新對象的這個屬性都會被改變,這可不是我們想要的啊~~~。對象的公有屬性尤其適合這種方法。
下面,我們來改進以前的一個例子:
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';
如您所見,通常我們在進行原型對象擴展之前,我們現(xiàn)完成了相關繼承工作的構建,否則his.prototype中后續(xù)新的屬性方法有可能會抹掉繼承來的東西。
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 }
如您所見,實際上調用toString()這個方法的區(qū)別僅僅在于幕后的少量操作。主要區(qū)別也就是屬性,方法的查找工作將更多地發(fā)生在her.prototype中。
以上這篇javascript 將共享屬性遷移到原型中去的實現(xiàn)方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
用js統(tǒng)計用戶下載網(wǎng)頁所需時間的腳本
下面的方法是個不錯的思路,建議對于js感興趣的朋友,推薦看2008-10-10身份證號碼前六位所代表的省,市,區(qū), 以及地區(qū)編碼下載
身份證號碼前六位所代表的省,市,區(qū), 以及地區(qū)編碼下載...2007-04-04JS代碼判斷IE6,IE7,IE8,IE9的函數(shù)代碼
JS代碼判斷瀏覽器版本,支持IE6,IE7,IE8,IE9!做網(wǎng)頁有時候會用到JS檢測IE的版本,下面是檢測Microsoft Internet Explorer版本的三種代碼2013-08-08細數(shù)promise與async/await的使用及區(qū)別說明
這篇文章主要介紹了細數(shù)promise與async/await的使用及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07原生JavaScript實現(xiàn)批量獲取表單數(shù)據(jù)
這篇文章主要為大家詳細介紹了如何使用原生JavaScript實現(xiàn)批量獲取表單數(shù)據(jù),文中的示例代碼講解詳細,有需要的小伙伴可以跟隨小編一起學習一下2024-01-01