一個函數(shù)是否被new有啥區(qū)別?

function Person(name, age) {
  this.name = name
  this.age = age
}

new Person('Flinn', 20)
// 在函數(shù)體里面實際會發(fā)生如下操作:
// var this = {}
// this.name = name
// this.age = age
// return undefined (被忽略)
// return this

Person('King', 22)
// 在函數(shù)體里面實際會發(fā)生如下操作:
// this.name = name (瀏覽器下,函數(shù)在window上下文被調(diào)用,所以this為window,所以window.name = 'King')
// this.age = age   (瀏覽器下,函數(shù)在window上下文被調(diào)用,所以this為window,所以window.age = 22)
// return undefined

但是要注意:

  • 如果一個函數(shù)的返回值是引用類型(數(shù)組,對象或者函數(shù))的數(shù)據(jù),那么這個函數(shù)作為構(gòu)造函數(shù)用new運算符執(zhí)行構(gòu)造時,運算的結(jié)果將被它的返回值取代,這時候,構(gòu)造函數(shù)體內(nèi)的this值丟失了,取而代之的是被返回的對象。

  • 如果一個函數(shù)的返回值是一個值類型,那么這個函數(shù)作為構(gòu)造函數(shù)用new運算符執(zhí)行構(gòu)造時,它的返回值將被丟棄。new 表達式的結(jié)果仍然是this所引用的對象。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容