箭頭函數(shù)原來是這樣的,99.9% 的人都不知道這點
點擊上方?前端瓶子君,關(guān)注公眾號
回復(fù)算法,加入前端編程面試算法每日一題群
一句話答案
因為箭頭函數(shù)沒有[[Construct]]這個內(nèi)部槽。
進一步解釋
函數(shù)對象是一個支持[[Call]]、[[Construct]]內(nèi)部方法的對象。每個支持[[Construct]]的對象必須支持[[Call]],也就是說,每個構(gòu)造函數(shù)必須是一個函數(shù)對象。因此,構(gòu)造函數(shù)也可以被稱為 構(gòu)造函數(shù)函數(shù) 或 構(gòu)造函數(shù)對象。
所以,想要對某個對象使用 new,就得確保該對象具有[[Construct]]這個內(nèi)部方法。而箭頭函數(shù)沒有[[Construct]]。
為什么沒有[[Construct]]
因為箭頭函數(shù)設(shè)計之初,就是為了設(shè)計一種更簡短的函數(shù)并且不綁定 this。所以箭頭函數(shù)不為參數(shù) super、this 或 new.target 定義本地綁定。箭頭函數(shù)中的 this、super、arguments 及 new.target 這些值由外圍最近一層非箭頭函數(shù)決定。
而這樣的一個函數(shù)設(shè)計者認為沒有必要委托給能夠[[Construct]]的目標函數(shù)。所以箭頭函數(shù)沒有 [[Construct]]。
同時因為沒有構(gòu)造原型的需求,所以箭頭函數(shù)不存在 prototype 屬性。
相關(guān)論據(jù)




以上為個人的一些見解,歡迎各位大佬拍磚
關(guān)于本文
作者:Jokerrr
https://juejin.cn/post/7050492355056664612
最后
評論
圖片
表情
