0

我使用 Jint 来解析 JS 代码并在其中调用函数。当我使用多线程环境时,我使用了对这个问题的响应中指出的程序解析方法:https ://github.com/sebastienros/jint/issues/384

所以我有一个Jint.Parser.Ast.Program例子。我可以遍历其中的IFunctionDeclarations 并找到我的函数。但我不知道如何实际调用这些函数......

Dim parser As New Jint.Parser.JavaScriptParser
Dim program As Jint.Parser.Ast.Program = parser.Parse(code)

For Each func As Jint.Parser.IFunctionDeclaration In program.FunctionDeclarations
    If func.Id.Name = myFunctionName Then
        ' How to call the function?
    End If
Next

我只找到了一种方法来执行整个Program. 我假设我必须这样做,以便这些功能实际上是在引擎中定义的。但是,我怎样才能在我的脚本中调用某个函数?

4

1 回答 1

0

一旦你的程序被执行,只需使用相同的方法来执行你的函数。示例是 c#

var parser = new Jint.Parser.JavaScriptParser();
// _parserCache is a static ConcurrentDictionary<string, Jint.Parser.Ast.Program>
var program = _parserCache.GetOrAdd(scriptName, key => parser.Parse(code));

foreach (var func in program.FunctionDeclarations)
{
    if (func.Id.Name == myFunctionName)
    {
        var exec = new Engine();
        // The entire program is executed, to define the function
        exec.Execute(program);
        // now you can call your function
        exec.Execute($"{myFunctionName}()");
    }
}
于 2017-09-08T09:52:45.910 回答