位置:首頁 > 軟件操作教程 > 編程開發(fā) > JavaScript > 問題詳情

JavaScript 構(gòu)造函數(shù)的返回值

提問人:劉團(tuán)圓發(fā)布時間:2020-11-26

■知識點

    構(gòu)造函數(shù)允許使用return語句。如果返回值為簡單值,則將被忽略,直接返回this指代的實例對象;如果返回值為對象,則將覆蓋this指代的實例,返回return后面跟隨的對象。

    為什么會出現(xiàn)這種情況呢?這與new命令解析過程有關(guān)系,使用new命令調(diào)用函數(shù)的解析過程

如下。

    第1步,當(dāng)使用new命令調(diào)用函數(shù)時,先創(chuàng)建一個空對象,作為實例返回。

    第2步,設(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后面跟著一個對象,會返回return語句指定的對象;否則會忽略return返回值,直接返回this對象。

■實例設(shè)計

    下面的示例在構(gòu)造函數(shù)內(nèi)部定義return返回一個對象直接量,當(dāng)使用new命令調(diào)用構(gòu)造函數(shù)時,返回的不是this指代的實例,而是這個對象直接量,因此當(dāng)讀取x和y屬性值時,與預(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);             //實例化對象1

console.log(pi.x);                               //true

console.log(pi.y);                               //false

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部