希岛爱理av免费一区二区,成人性教育av免费网址,欧美7777,在线免费日韩片

十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開(kāi)發(fā)_APP開(kāi)發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號(hào) 掃一掃關(guān)注
小程序
tel-icon全國(guó)服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開(kāi)百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

ECMAScript中構(gòu)造函數(shù)模式的不足之處和解決方法

百恒網(wǎng)絡(luò) 2013-03-09 4857

ECMAScript中構(gòu)造函數(shù)模式雖然好用,但也并非沒(méi)有缺點(diǎn)。使用構(gòu)造函數(shù)的主要問(wèn)題,就是每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍。在前面的例子中,personl和person2都有一個(gè)名為sayName()的方法,但那兩個(gè)方法不是同一個(gè)Function的實(shí)例。不要忘了——ECMAScript中的函數(shù)是對(duì)象,因此每定義一個(gè)函數(shù),也就是實(shí)例化了一個(gè)對(duì)象。從邏輯角度講,此時(shí)的構(gòu)造函數(shù)也可以這樣定義:

function Person(name,age,Job){

this.name=name;

this.age=age;

this.job=job;

this.name = new Function("alert(this.name)"); 南昌網(wǎng)絡(luò)公司技術(shù)人提示:與聲明函數(shù)在邏輯上是等到價(jià)的

}

從這個(gè)角度上來(lái)看構(gòu)造函數(shù),更容易明白每個(gè)Person實(shí)例都包含一個(gè)不同的Function實(shí)例(以顯示name屬性)的本質(zhì)。如前所述,這兩個(gè)函數(shù)是不相等的,下面的代碼可以證明這一點(diǎn):

alert(personl.sayName==Derson2.sayName); //false

然而,創(chuàng)建兩個(gè)完成同樣任務(wù)的Function實(shí)例的確沒(méi)有必要;況且有this對(duì)象在,根本不用在執(zhí)行代碼前就把函數(shù)綁定到特定對(duì)象上面。因此,大可像下面這樣,通過(guò)把函數(shù)定義轉(zhuǎn)移到構(gòu)造函數(shù)外部來(lái)解決這個(gè)問(wèn)題:

function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = sayName; } function sayName(){ alert(this.name); } var personl=new Person("Nicholas",29,"Software Engineer")

var person2=new Person("Greg",27,"Doctor");

personl.sayName(); //"Nicholas"

person2.sayName(); //"Greg"

alert(personl instanceof Object);//true

alert(personl instanceof Person);//true

alert(person2 instanceof Obj ect);//true

alert(person2 instanceof Person);//true

alert(personl.constructor==Person); //true

alert(person2.constructor==Person); //true

alert(personl.sayName==person2.sayName); //true

在這個(gè)例子中,我們把sayName()函數(shù)的定義轉(zhuǎn)移到了構(gòu)造函數(shù)外部。而在構(gòu)造函數(shù)內(nèi)部,我們將sayName屬性設(shè)置成等于全局的sayName函數(shù)。這樣一來(lái),由于sayName包含的是一個(gè)指向函數(shù)的指針,因此personl和person2對(duì)象就共享了在全局作用域中定義的同一個(gè)sayName()函數(shù)。這樣做確實(shí)解決了兩個(gè)函數(shù)做同一件事的問(wèn)題,可是新問(wèn)題又來(lái)了:在全局作用域中定義的函數(shù)實(shí)際上只能被某個(gè)對(duì)象調(diào)用,這讓全局作用域有點(diǎn)名不副實(shí)。而更讓人無(wú)法接受的是:如果對(duì)象需要定義很多方法,那么就要定義很多個(gè)全局函數(shù),于是我們這個(gè)自定義的引用類型就絲毫沒(méi)有封裝性可言了,對(duì)于南昌建站公司技術(shù)人員來(lái)講,這個(gè)理解有點(diǎn)難度,但結(jié)合實(shí)例,通過(guò)實(shí)例操作應(yīng)該不成問(wèn)題.

好在,這些問(wèn)題可以通過(guò)使用原型模式來(lái)解決。

本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://www.527701.com 如轉(zhuǎn)載請(qǐng)注明出處!


400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開(kāi)百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠(chéng)為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×
主站蜘蛛池模板: 汉阴县| 遂川县| 德州市| 德安县| 军事| 沛县| 车致| 永年县| 中西区| 策勒县| 石景山区| 德格县| 宜黄县| 习水县| 铜鼓县| 巨野县| 门头沟区| 巢湖市| 陇西县| 黎平县| 赞皇县| 盘山县| 信丰县| 精河县| 枣强县| 南投县| 平谷区| 鲁甸县| 南漳县| 东海县| 木里| 依安县| 重庆市| 临高县| 西乌珠穆沁旗| 兴海县| 贡嘎县| 皮山县| 拉萨市| 巴青县| 大余县|