一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

慎用 somefunction.prototype 分析

復(fù)制代碼 代碼如下:
// code from jb51.NET
function Person(name) {
this.Name = name;
}
Person.prototype.SayHello = function() {
alert('Hello, ' + this.Name);
}
Person.prototype.SayBye = function() {
alert('Goodbye, ' + this.Name);
}

不過,有的時(shí)候,為了書寫以及維護(hù)的方便,我們會(huì)把公有方法的聲明寫到一個(gè)對(duì)象里,然后賦值給 Person.prototype,例如:
復(fù)制代碼 代碼如下:
// code from jb51.NET
function Person(name) {
this.Name = name;
}
Person.prototype = {
SayHello: function() {
alert('Hello, ' + this.Name);
},
SayBye: function() {
alert('Goodbye, ' + this.Name);
}
}

使用這種方式,在這個(gè)類具有大量公有方法的時(shí)候,就不需要維護(hù)許多的 Person 標(biāo)識(shí)符,如果某一天這個(gè)類的名字需要改變,那么要改的地方只有兩個(gè),一個(gè)是 function 的聲明,一個(gè)是 prototype 前面的標(biāo)識(shí)符,如果是使用前一種方式的話,那么有多少個(gè)公有方法,就需要維護(hù) N+1 個(gè)標(biāo)識(shí)符了,雖然可以使用查找替換,但是從穩(wěn)定上來說,查找替換可能會(huì)引起一些錯(cuò)誤,這增加了維護(hù)的成本。

這種方式雖然給我們的維護(hù)增加了便利,但也引發(fā)了另外一個(gè)隱藏的問題,就是類的 constructor 屬性丟失的問題。
復(fù)制代碼 代碼如下:
// code from jb51.NET
function Person1(name) {
this.Name = name;
}
Person1.prototype.SayHello = function() {
alert('Hello, ' + this.Name);
}
Person1.prototype.SayBye = function() {
alert('Goodbye, ' + this.Name);
}
// code from jb51.NET
function Person2(name) {
this.Name = name;
}
Person2.prototype = {
SayHello: function() {
alert('Hello, ' + this.Name);
},
SayBye: function() {
alert('Goodbye, ' + this.Name);
}
}
alert(new Person1('Bill').constructor);
alert(new Person2('Steve').constructor);

運(yùn)行上面的測(cè)試代碼我們可以發(fā)現(xiàn),Person1 的 constructor 屬性為 Person1 類的構(gòu)造函數(shù),但是 Person2 的 constructor 屬性卻是 Object,那么在需要使用 constructor 屬性來判斷對(duì)象類型的時(shí)候,就會(huì)出現(xiàn)問題。
因此,在寫 JavaScript 類的時(shí)候,如果不需要使用 constructor 屬性來獲取對(duì)象的類型,那么個(gè)人比較傾向于使用第二種寫法,但是如果需要使用 constructor 屬性以實(shí)現(xiàn)自己的反射機(jī)制或 GetType 函數(shù)等等,那么就要使用第一種寫法。
當(dāng)然,如果在實(shí)現(xiàn)自己反射機(jī)制或 GetType 函數(shù)時(shí)并不依賴 constructor 屬性,那么兩種寫法都是可以的了,例如額外維護(hù)一個(gè)成員變量,用于標(biāo)識(shí)自身的類型等。也可以使用一些現(xiàn)成的JS框架,有一些框架已經(jīng)實(shí)現(xiàn)了JS中類的實(shí)現(xiàn)等,例如 js.class,這就看個(gè)人需要進(jìn)行取舍了。

JavaScript技術(shù)慎用 somefunction.prototype 分析,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本高清色视影www日本 | 亚洲精品天堂自在久久77 | 成人午夜视频在线观看 | 91精品久久久久亚洲国产 | 国产床戏无遮挡免费观看网站 | 91网站网站网站在线 | 欧美一级做一a做片性视频 欧美一级做一级做片性十三 | 久久久精品2021免费观看 | 欧美成人免费大片888 | 色多多免费视频观看区一区 | 国产精品秒播无毒不卡 | 免费韩国一级毛片 | 久久女人天堂 | 精品国产精品 | 激情图片视频小说 | 91在线高清视频 | 天天操婷婷 | 日韩精品免费一区二区三区 | 国产一区美女 | 婷婷色在线播放 | 欧美色成人综合 | 久久久久久91精品色婷婷 | 视频成人永久免费看 | 黄网站在线播放 | 国产精品久久久尹人香蕉 | 精品一区二区三区免费观看 | 亚洲午夜在线视频 | 久久国产精品国语对白 | 国产最强大片免费视频 | 午夜激情免费视频 | 中文字幕久久网 | 最色成人网 | 一区二区在线视频 | 亚洲国产一区二区三区 | 国内自拍第五一页 | 亚洲影视精品 | 国产精品成人免费视频 | 5151四虎永久在线精品免费 | 人人dvd| 国产高清视频免费人人爱 | 国产免费精彩视频 |