我有一個函數接受回調並將其綁定爲this
。如果使用箭頭函數作爲回調調用函數,我想拋出一個錯誤(因爲我不能將this
綁定到箭頭函數)。如何正確檢查回調是否是箭頭函數?
喜歡的東西:
doSomethingWithMyCallback(function(){}); // ok
doSomethingWithMyCallback(() => {}); // should throw an error
如何檢查,如果回調不箭頭功能(即我可以綁定this
它)?
我有一個函數接受回調並將其綁定爲this
。如果使用箭頭函數作爲回調調用函數,我想拋出一個錯誤(因爲我不能將this
綁定到箭頭函數)。如何正確檢查回調是否是箭頭函數?
喜歡的東西:
doSomethingWithMyCallback(function(){}); // ok
doSomethingWithMyCallback(() => {}); // should throw an error
如何檢查,如果回調不箭頭功能(即我可以綁定this
它)?
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)
來調用它。
參考文獻:
'f.toString()'? 。 – zerkms
問題的整個前提是錯誤的。您可以使用新的上下文成功調用箭頭函數,而箭頭函數將做正確的事情並完全忽略它。這就是整個觀點,拋出一個錯誤是愚蠢的。同樣,你無法判斷某人是否通過了'someFunction.bind(this)'作爲'doSomethingWithMyCallback'的參數。 – zzzzBov
您可以將'this'作爲參數傳遞給'function(thisArg){}'或'(thisArg)=> {}'而不是使用'.bind()'嗎? – guest271314