私は次のようなことをするスクリプトを持っています:
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
}
しかし、それでも私の問題は解決しませんでした。
おそらく使用var someFunc = new Function(arg, body)は機能しますが(テストしていません)、渡されたコードを完全に制御vm.runInNewContextできないため、そのソリューションも使用できません。
context.someFunc instanceof Functionコンテキスト外で true を返すにはどうすればよいですか?