重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
一.構(gòu)造函數(shù)
專門(mén)用來(lái)生成“對(duì)象”的和水泥胡,構(gòu)造函數(shù)是提供一個(gè)模板,描述對(duì)象的基本結(jié)構(gòu),一個(gè)構(gòu)造函數(shù)可以生成多個(gè)對(duì)象。
構(gòu)造函數(shù)的特點(diǎn):
(1)函數(shù)體內(nèi)部使用了this關(guān)鍵字,代表了所要生成的對(duì)象的實(shí)例
(2)生成對(duì)象的時(shí)候,必須要new命令,來(lái)調(diào)用函數(shù)。
二.New命令
New命令的作用,就是執(zhí)行構(gòu)造函數(shù),返回一個(gè)實(shí)例對(duì)象。
如果忘了使用new命令,直接調(diào)用構(gòu)造函數(shù)會(huì)發(fā)生什么事?
這種情況下,構(gòu)造函數(shù)就變成了普通函數(shù),并不會(huì)生成實(shí)例對(duì)象。此時(shí)this這時(shí)代表全局對(duì)象。避免出現(xiàn)不使用new命令、直接調(diào)用構(gòu)造函數(shù)的情況。為了保證構(gòu)造函數(shù)必須與new命令一起使用,一個(gè)解決辦法是,在構(gòu)造函數(shù)內(nèi)部使用嚴(yán)格模式,即第一行加上use strict。
New 命令的原理
(1)創(chuàng)建一個(gè)空對(duì)象,作為將要返回的對(duì)象實(shí)例
(2)將這個(gè)空對(duì)象的原型,指向構(gòu)造函數(shù)的prototype屬性
(3)將這個(gè)空對(duì)象賦值給函數(shù)內(nèi)部的this關(guān)鍵字
(4)開(kāi)始執(zhí)行構(gòu)造函數(shù)內(nèi)部的代碼
var a =new A()
(1)var a = new obiect();
(2)a._proto_ = A.prototype;
(3)A.call(a);
(4)執(zhí)行構(gòu)造函數(shù)里面的代碼
如果構(gòu)造函數(shù)內(nèi)部有return語(yǔ)句,而且return后面跟著一個(gè)對(duì)象,new命令會(huì)返回return語(yǔ)句指定的對(duì)象;否則,就會(huì)不管return語(yǔ)句,返回this對(duì)象。
如果對(duì)普通函數(shù)(內(nèi)部沒(méi)有this關(guān)鍵字的函數(shù))使用new命令,則會(huì)返回一個(gè)空對(duì)象。
function getMessage() {
return 'this is a message';
}
var msg = new getMessage();
console.log(msg); // getMessage {}
console.log(typeof msg);//object
這是因?yàn)閚ew命令總是返回一個(gè)對(duì)象,要么是實(shí)例對(duì)象,要么是return語(yǔ)句指定的對(duì)象。本例中,return語(yǔ)句返回的是字符串,所以new命令就忽略了該語(yǔ)句。
參考:http://javascript.ruanyifeng.com/oop/basic.html
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。