我有一个执行以下操作的脚本:
var context = {}
vm.runInNewContext("var someFunc = function() {}", context);
console.log(typeof context.someFunc); //function
console.log(context.someFunc instanceof Function); //false
我明白为什么第 4 行返回 false:在新上下文中有一个新Function对象,它不等于Function外部上下文中的对象。因此,context.someFunc不是该外部Function对象的实例。
但是,该context.someFunc函数由使用instanceof Function. 由于context.someFunc是一个函数,但不是Function该上下文中的实例,因此第三方不会将其视为函数,因此它应该崩溃。我尝试使用以下上下文:
var context = {
"Function" : Function
}
但这也没有解决我的问题。
也许 usingvar someFunc = new Function(arg, body)会起作用(尚未测试),但是我无法完全控制传递给的代码vm.runInNewContext,因此我也无法使用该解决方案。
如何让context.someFunc instanceof Function在上下文之外返回 true?