JavaScript 構(gòu)造函數(shù)的返回值
■知識(shí)點(diǎn)
構(gòu)造函數(shù)允許使用return語句。如果返回值為簡單值,則將被忽略,直接返回this指代的實(shí)例對(duì)象;如果返回值為對(duì)象,則將覆蓋this指代的實(shí)例,返回return后面跟隨的對(duì)象。
為什么會(huì)出現(xiàn)這種情況呢?這與new命令解析過程有關(guān)系,使用new命令調(diào)用函數(shù)的解析過程
如下。
第1步,當(dāng)使用new命令調(diào)用函數(shù)時(shí),先創(chuàng)建一個(gè)空對(duì)象,作為實(shí)例返回。
第2步,設(shè)置實(shí)例的原型,指向構(gòu)造函數(shù)的prototype屬性。
第3步,設(shè)置構(gòu)造函數(shù)體內(nèi)的this值,讓它指向?qū)嵗?/p>
第4步,開始執(zhí)行構(gòu)造函數(shù)內(nèi)部的代碼。
第5步,如果構(gòu)造函數(shù)內(nèi)部有return語句,而且return后面跟著一個(gè)對(duì)象,會(huì)返回return語句指定的對(duì)象;否則會(huì)忽略return返回值,直接返回this對(duì)象。
■實(shí)例設(shè)計(jì)
下面的示例在構(gòu)造函數(shù)內(nèi)部定義return返回一個(gè)對(duì)象直接量,當(dāng)使用new命令調(diào)用構(gòu)造函數(shù)時(shí),返回的不是this指代的實(shí)例,而是這個(gè)對(duì)象直接量,因此當(dāng)讀取x和y屬性值時(shí),與預(yù)期的結(jié)果是不同的。
function Point(x,y) //構(gòu)造函數(shù)
this.x = x; //私有屬性
this.y = y; //私有屬性
return { x : true, y : false }
}
var pi = new Point(100,200); //實(shí)例化對(duì)象1
console.log(pi.x); //true
console.log(pi.y); //false
點(diǎn)擊加載更多評(píng)論>>