由於正常函數和ES6箭頭函數之間的上下文差異存在很大差異,我希望能夠找出在回調函數fn上收到哪一個函數。找出回調函數是否是ES6箭頭
typeof
將returnfunction
兩者。有什麼辦法可以區分嗎?
由於正常函數和ES6箭頭函數之間的上下文差異存在很大差異,我希望能夠找出在回調函數fn上收到哪一個函數。找出回調函數是否是ES6箭頭
typeof
將returnfunction
兩者。有什麼辦法可以區分嗎?
箭頭函數不能用作構造函數,而顯示typeof arrowFunc.prototype
爲undefined
,而非箭頭函數顯示「object」。
已確認在Chromebook Chrome 51.0.2704.103中使用'x = function(){return 1;}; Y =(()=> 1); console.log(typeof x.prototype,typeof y.prototype);'yielding' object,undefined' – Paul
它在[this fiddle]中返回'object'(http://www.es6fiddle.net/iqa214ua/) 。 – daniloprates
嗯,我想它不會在Babel上工作,因爲它正在編譯爲正常的函數:/但感謝解決方案,似乎是編譯器不是問題時的最佳方式。 – daniloprates
您可以使用Function.toString()
返回函數源代碼的字符串表示形式,然後在字符串中查找箭頭(=>
)。
var arrowFunc = x => 2 * x
var regFunc = function (x) {return 2 * x}
arrowFunc.toString().indexOf("=>") // 2
regFunc.toString().indexOf("=>") // -1
請不要這樣做,如果你正在設計一個API,它應該與這兩個工作一致。想想用戶重構代碼的例子,你是否真的期望函數的簽名根據傳遞的函數而改變?我不會。另外請記住,任何檢測方法都可能會失敗並顯示轉換後的箭頭函數,因此您的代碼將根據運行環境而改變行爲。 – loganfsmyth
爲什麼您想要分辨差異? –
回調的接收器絕對沒有區別。您可以簡單地調用所有類型的回調。 – Bergi