繁体   English   中英

如果我使用Jint引擎在JavaScript代码中定义.Net类会发生什么

[英]What happens if I define a .Net class in JavaScript code using Jint engine

Jint中 ,您可以访问JS中的.Net类。

JS文件代码:

var write = function (msg) {

    var log = System.Console.WriteLine;
    log(msg);
};

C#代码

 Engine jsEngine = new Engine(e=>e.AllowClr());
 string script = System.IO.File.ReadAllText("file1.js");
 jsEngine.Execute(script);
 jsEngine.Invoke("write", "Hello World!");  //Displays in Console: "Hello World!"
  • 我无法理解后台会发生什么? 哪个编译器会在JS文件中编译注入的c#代码? C#编译器还是JS?
  • 如果我在JS文件中声明了C#List,那么生成的对象是JS对象还是C#对象?

您没有注入C#代码,Jint解释器将理解您是对.NET类的引用,因此执行此代码。 因为Jint是用.NET编写的,所以它可以运行你要求的任何.NET代码。

Jint也没有编译任何东西,它会读取每个javascript语句并尝试一个接一个地评估它们,跟踪你声明和使用的所有变量,函数和其他JS工件。

让我们一步一步地完成Invoke调用:

  1. jsEngine.Invoke使Jint在JavaScript中执行write方法,并传入“Hello World!”
  2. write方法调用System.Console.WriteLine,此时Jint从JavaScript转换回托管代码并调用该方法。

现在回答你的问题:

  1. 没有代码被注入。 您的代码仅从托管转换为脚本(解释)到托管执行。
  2. 如果在JS中创建C#List对象,则该对象是一个真正的托管.Net对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM