2016-10-11 50 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)来调用它。

参考文献:

相关问题