2016-07-05 98 views
5

由於正常函數和ES6箭頭函數之間的上下文差異存在很大差異,我希望能夠找出在回調函數fn上收到哪一個函數。找出回調函數是否是ES6箭頭

typeofreturnfunction兩者。有什麼辦法可以區分嗎?

+3

請不要這樣做,如果你正在設計一個API,它應該與這兩個工作一致。想想用戶重構代碼的例子,你是否真的期望函數的簽名根據傳遞的函數而改變?我不會。另外請記住,任何檢測方法都可能會失敗並顯示轉換後的箭頭函數,因此您的代碼將根據運行環境而改變行爲。 – loganfsmyth

+0

爲什麼您想要分辨差異? –

+0

回調的接收器絕對沒有區別。您可以簡單地調用所有類型的回調。 – Bergi

回答

6

箭頭函數不能用作構造函數,而顯示typeof arrowFunc.prototypeundefined,而非箭頭函數顯示「object」。

+0

已確認在Chromebook Chrome 51.0.2704.103中使用'x = function(){return 1;}; Y =(()=> 1); console.log(typeof x.prototype,typeof y.prototype);'yielding' object,undefined' – Paul

+0

它在[this fiddle]中返回'object'(http://www.es6fiddle.net/iqa214ua/) 。 – daniloprates

+0

嗯,我想它不會在Babel上工作,因爲它正在編譯爲正常的函數:/但感謝解決方案,似乎是編譯器不是問題時的最佳方式。 – daniloprates

2

您可以使用Function.toString()返回函數源代碼的字符串表示形式,然後在字符串中查找箭頭(=>)。

var arrowFunc = x => 2 * x 
var regFunc = function (x) {return 2 * x} 

arrowFunc.toString().indexOf("=>") // 2 
regFunc.toString().indexOf("=>") // -1 
+0

不會檢測到具有嵌套箭頭函數或箭頭函數的默認參數值的非箭頭函數作爲箭頭功能? – traktor53

+0

我想它會檢測到一個嵌套的箭頭函數,在某些情況下可以通過評估'indexOf'的返回來阻止。雖然不確定默認參數值,但他們不使用'=>'他們呢? –

+0

只有當默認值是一個函數並在線定義爲一個箭頭函數時... – traktor53

相關問題