欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 將共享屬性遷移到原型中去的實現(xiàn)方法

 更新時間:2016年08月31日 08:54:40   投稿:jingxian  
下面小編就為大家?guī)硪黄猨avascript 將共享屬性遷移到原型中去的實現(xiàn)方法。小編覺得挺不錯的,現(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)方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論