私は次のようなことをするスクリプトを持っています:
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 を返すにはどうすればよいですか?