我有一个函数接受回调并将其绑定为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