簡體   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