我想知道有没有办法区分JavaScript脚本函数(如
背景:我需要创建一个No-op转发ES6代理,它可以处理对象上的本地函数,但它会失败并显示
为了解决这个问题,在我的代理的
更多细节:https://github.com/FranckFreiburger/module-invalidate/blob/master/index.js#L106 注意:
function(){}
)和JavaScript原生函数(如Math.cos
)。我已经知道了func.toString().indexOf('[native code]') != -1
的技巧,但我想知道是否还有其他方法来检测它。背景:我需要创建一个No-op转发ES6代理,它可以处理对象上的本地函数,但它会失败并显示
TypeError: Illegal invocation
(请参见Illegal invocation error using ES6 Proxy and node.js)。为了解决这个问题,在我的代理的
get
处理程序中,我使用.bind()
绑定了所有的函数,但如果我能有效地检测本地函数,我只需要绑定这些本地函数。更多细节:https://github.com/FranckFreiburger/module-invalidate/blob/master/index.js#L106 注意:
(function() {}).toString() -> "function () {}"
(function() {}).prototype -> {}
(require('os').cpus).toString() -> "function getCPUs() { [native code] }"
(require('os').cpus).prototype -> getCPUs {}
(Math.cos).toString() -> "function cos() { [native code] }"
(Math.cos).prototype -> undefined
(Promise.resolve().then).toString() -> "function then() { [native code] }"
(Promise.resolve().then).prototype -> undefined
编辑:
目前最好的解决方案是测试!('prototype' in fun)
,但它不能与require('os').cpus
一起使用...