干熟妇在线视频午夜剧场一级A级|99成人香视频日本两性激情视频|久久 午夜福利无码精品人妻一区|热久久超碰精品精品少妇一区二区|五月天综合在线国产一区免费视频|亚洲成人中心热re久久99|亚洲国产怡红院丁香五月综合h|玖玖九久久久午夜射精视频

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

百恒網(wǎng)絡

南昌百恒網(wǎng)絡

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

百恒網(wǎng)絡 2013-03-09 4843

ECMAScript中構(gòu)造函數(shù)模式雖然好用,但也并非沒有缺點。使用構(gòu)造函數(shù)的主要問題,就是每個方法都要在每個實例上重新創(chuàng)建一遍。在前面的例子中,personl和person2都有一個名為sayName()的方法,但那兩個方法不是同一個Function的實例。不要忘了——ECMAScript中的函數(shù)是對象,因此每定義一個函數(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)絡公司技術(shù)人提示:與聲明函數(shù)在邏輯上是等到價的

}

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

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

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

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

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

好在,這些問題可以通過使用原型模式來解決。

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


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

歡迎您的光顧,我們將竭誠為您服務×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務 售后服務
 
售后服務 售后服務
 
備案專線 備案專線
 
×
镇远县| 太原市| 玉山县| 青川县| 佛山市| 韶山市| 民勤县| 株洲市| 尼勒克县| 拜泉县| 永兴县| 天长市| 广德县| 怀仁县| 黄骅市| 遵义市| 灵寿县| 拉萨市| 乌兰察布市| 邵武市| 延长县| 维西| 鄂尔多斯市| 南陵县| 湟中县| 阿荣旗| 平谷区| 盐山县| 汉川市| 大悟县| 湾仔区| 田林县| 池州市| 天水市| 彭水| 方正县| 临海市| 崇阳县| 祁门县| 吉木萨尔县| 启东市|