由于正常函数和ES6箭头函数之间的上下文差异存在很大差异,我希望能够找出在回调函数fn上收到哪一个函数。找出回调函数是否是ES6箭头
typeof
将returnfunction
两者。有什么办法可以区分吗?
由于正常函数和ES6箭头函数之间的上下文差异存在很大差异,我希望能够找出在回调函数fn上收到哪一个函数。找出回调函数是否是ES6箭头
typeof
将returnfunction
两者。有什么办法可以区分吗?
箭头函数不能用作构造函数,而显示typeof arrowFunc.prototype
为undefined
,而非箭头函数显示“object”。
已确认在Chromebook Chrome 51.0.2704.103中使用'x = function(){return 1;}; Y =(()=> 1); console.log(typeof x.prototype,typeof y.prototype);'yielding' object,undefined' – Paul
它在[this fiddle]中返回'object'(http://www.es6fiddle.net/iqa214ua/) 。 – daniloprates
嗯,我想它不会在Babel上工作,因为它正在编译为正常的函数:/但感谢解决方案,似乎是编译器不是问题时的最佳方式。 – daniloprates
您可以使用Function.toString()
返回函数源代码的字符串表示形式,然后在字符串中查找箭头(=>
)。
var arrowFunc = x => 2 * x
var regFunc = function (x) {return 2 * x}
arrowFunc.toString().indexOf("=>") // 2
regFunc.toString().indexOf("=>") // -1
请不要这样做,如果你正在设计一个API,它应该与这两个工作一致。想想用户重构代码的例子,你是否真的期望函数的签名根据传递的函数而改变?我不会。另外请记住,任何检测方法都可能会失败并显示转换后的箭头函数,因此您的代码将根据运行环境而改变行为。 – loganfsmyth
为什么您想要分辨差异? –
回调的接收器绝对没有区别。您可以简单地调用所有类型的回调。 – Bergi