欧美亚洲大片-国产免费成人在线视频-国产成人8x人在线视频软件-日韩亚洲欧美中文字幕-97伦伦午夜电影理伦片-亚洲综合精品视频-曰本女人牲交高潮视频-久久久精品欧美-天天干天天操天天碰-精品国产乱码久久久久久1区2区-黄色一级免费片-在线免费欧美-国产成人精品在线视频-精人妻一区二区三区-香蕉视频2020-综合久久99-欧美日韩亚洲国产综合

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

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

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

ECMAScript中的構(gòu)造函數(shù)創(chuàng)建方法及注意事項

百恒網(wǎng)絡(luò) 2013-03-07 5157

ECMAScript中的構(gòu)造函數(shù)可用來創(chuàng)建特定類型的對象。像Object和Array這樣的原生構(gòu)造函數(shù),在運行時會自動出現(xiàn)在執(zhí)行環(huán)境中。此外,也可以創(chuàng)建自定義的構(gòu)造函數(shù),從而定義自定義對象類型的屬性和方法。例如,可以使用構(gòu)造函數(shù)模式將前面的例子重寫如下:

function Person(name,age,Job){

this.name=name;

this.age=age;

this.Job=Job;

this.sayName=function(){

alert(this.name);

};

}

var personl:new Person("Nicholas",29,"Software Engineer");

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

personl.sayName(); //"Nicholas"

person2.sayName(); //"Greg"

在這個例子中,Person()函數(shù)取代了createPerson()函數(shù)。我們注意到,Person()中的代碼除了與createPerson()中相同的部分外,還存在以下不同之處:

□沒有顯式地創(chuàng)建對象;

□直接將屬性和方法賦給了this對象;

□沒有return語句。

此外,還應(yīng)該注意到函數(shù)名Person使用的是大寫字母P,按照慣例,構(gòu)造函數(shù)始終都應(yīng)該以一個大寫字母開頭,而非構(gòu)造函數(shù)則應(yīng)該以一個小寫字母開頭。這個做法借鑒自其他OO語言,主要是 為了區(qū)別于ECMAScript中的其他函數(shù);因為構(gòu)造函數(shù)本身也是函數(shù),只不過可以用來創(chuàng)建對象而已。

要創(chuàng)建Person的新實例,必須使用new操作符。以這種方式調(diào)用構(gòu)造函數(shù)實際上會經(jīng)歷以下4個步驟:

(1)創(chuàng)建一個新對象;

(2)將構(gòu)造函數(shù)的作用域賦給新對象(因此this就指向了這個新對象);

(3)執(zhí)行構(gòu)造函數(shù)中的代碼(為這個新對象添加屬性);

(4)返回新對象。

備注:南昌網(wǎng)站設(shè)計公司技術(shù)認為,構(gòu)造類似于類的結(jié)構(gòu),但有些不用.

在前面例子的最后,personl和person2分別保存著Person的一個不同的實例。這兩個對象都有一個constructor(構(gòu)造函數(shù))屬性,該屬性指向Person,如下所示:

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

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

對象的constructor屬性最初是用來標(biāo)識對象類型的。但是,提到檢測對象類型,還是instanceof操作符要更可靠一些。我們在這個例子中創(chuàng)建的所有對象既是Object的實例,同時也是Person的實例,這一點通過instanceof操作符可以得到驗證:

alert(personl instanceof Object); //true

alert(personl instanceof Person); //true

alert(person2 instanceof Object); //true

alert(person2 instanceof Person); //true

創(chuàng)建自定義的構(gòu)造函數(shù)意味著將來可以將它的實例標(biāo)識為一種特定的類型;而這正是構(gòu)造函數(shù)模式勝過工廠模式的地方。在這個例子中,personl和person2之所以同時是Object的實例,是因為所有對象均繼承自O(shè)bject。

南昌網(wǎng)絡(luò)公司技術(shù)員提示,以這種方式定義的構(gòu)造函數(shù)是定義在Global對象(在瀏覽器中是window對象)中的,因此除非另有說明,instanceof操作符和constructor屬性始終會假設(shè)是在全局作用域中查詢構(gòu)造函數(shù).

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


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

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

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×
郑州市| 临邑县| 永川市| 鲁山县| 肃宁县| 和硕县| 雷州市| 马边| 平度市| 佛学| 罗源县| 永城市| 区。| 嫩江县| 彭山县| 木兰县| 揭东县| 秦安县| 宿迁市| 宣恩县| 华阴市| 白沙| 长岛县| 海南省| 姚安县| 富蕴县| 黑山县| 监利县| 平昌县| 石渠县| 巴塘县| 丰都县| 白水县| 黄陵县| 乌兰县| 民丰县| 台南市| 扬中市| 峨眉山市| 江口县| 济宁市|