2016-08-23 62 views
3

在_proto_構造函數中,普通函數和箭頭函數有什麼不同?

let anonymous = function() { 
 
    return 'hello' 
 
}; 
 

 
let f =() => 'world'; 
 

 
console.log(new anonymous['__proto__'].constructor()); 
 
console.log(new f['__proto__'].constructor()); 
 

 

 
console.log(anonymous());

兩個函數返回與名稱的功能是anonymous當我嘗試創建它的新實例。

我的問題:當我打電話給anonymous()函數,爲什麼它不碰到第二個構造函數(箭頭函數)?

+1

你的問題令人費解和困惑。他們是2個不同的對象,爲什麼會調用匿名執行f()? – Mox

+0

你是什麼意思,「爲什麼它沒有撞到第二個構造函數」? 「它」指的是什麼? – undefined

+1

箭頭函數不是構造函數。 – Oriol

回答

5

這兩個函數的[[Prototype]]是Function.prototype。在這個意義上,函數表達式和箭頭函數沒有區別。

let anonymous = function() { 
 
    return 'hello' 
 
}; 
 
let f =() => 'world'; 
 
console.log(Object.getPrototypeOf(anonymous) === Function.prototype); // true 
 
console.log(Object.getPrototypeOf(f) === Function.prototype); // true

而且Function.prototype.constructor當然Function的。

所以你在做new Function(),它創建一個什麼都不做的函數。該無用功能稱爲anonymous,因爲它沒有名稱,但它不是anonymous變量中的功能。

+0

非常感謝!我應該先閱讀'Function.prototype' :) –