如何正确检查回调是否为箭头功能?

时间:2016-10-11 00:57:32

标签: javascript

我有一个接受回调并将this绑定到它的函数。如果使用箭头函数调用函数作为回调,我想抛出一个错误(因为我无法将this绑定到箭头函数)。

类似的东西:

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

如何检查回调是否不是箭头功能(即我可以将this绑定到它)?

1 个答案:

答案 0 :(得分:3)

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)调用该功能。

参考文献: