2016-10-11 53 views
-1

我有一個函數接受回調並將其綁定爲this。如果使用箭頭函數作爲回調調用函數,我想拋出一個錯誤(因爲我不能將this綁定到箭頭函數)。如何正確檢查回調是否是箭頭函數?

喜歡的東西:

doSomethingWithMyCallback(function(){}); // ok 
doSomethingWithMyCallback(() => {}); // should throw an error 

如何檢查,如果回調不箭頭功能(即我可以綁定this它)?

+1

'f.toString()'? 。 – zerkms

+1

問題的整個前提是錯誤的。您可以使用新的上下文成功調用箭頭函數,而箭頭函數將做正確的事情並完全忽略它。這就是整個觀點,拋出一個錯誤是愚蠢的。同樣,你無法判斷某人是否通過了'someFunction.bind(this)'作爲'doSomethingWithMyCallback'的參數。 – zzzzBov

+0

您可以將'this'作爲參數傳遞給'function(thisArg){}'或'(thisArg)=> {}'而不是使用'.bind()'嗎? – guest271314

回答

2

ES2015標準使得Function.prototype.toString的定義更清晰(與ES5.1相比),現在可以確定它是「正常」還是使用它的箭頭函數。

字符串表示必須有一個FunctionDeclaration的語法,FunctionExpression,GeneratorDeclaration,GeneratorExpression,ClassDeclaration,ClassExpression,ArrowFunction,MethodDefinition,或GeneratorMethod取決於對象的實際特性。

f.toString()會來與第一角色f(如function),如果它是一個「正常」的功能,或具有開放括號((如() => {})。

如果有人擔心覆蓋函數toString的函數,可以用Function.prototype.toString.call(f)來調用它。

參考文獻:

相關問題