chromium源碼閱讀--V8 Embbeding


V8是google提供高性能JavaScript解釋器,嵌入在chromium里執行JavaScript代碼。

V8本身是C++實現的,所有嵌入本身毫無壓力,一起編譯即可,不過作為一個動態語言解釋器,它的世界觀肯定跟C++還是有區別的。

編程語言定義了計算機對現實世界的表達方式,不同的語言有不同的認識,在JavaScript里,類,對象,方法的表達與C++只在概念上保持一致,在表達和實現上是有很大不同的。

那么要將C++類或對象綁定到V8里,就需要做一些對應的轉換,才能使得V8認識C++定義的東西。V8提供函數模板(class FunctionTemplate)和對象模板(class ObjectTemplate)用來創建JS的函數與對象,

對JS有一定了解的同學,應該知道JS沒有class關鍵字,只有function關鍵字,JS的類也是通過function定義的構造函數來完成的,而對於類的方法聲明也是通過prototype來添加的,並且這一切都是可以動態添加(這感覺太酸爽~)哦。

嗯,通過C++來給V8解釋器添加新的類,對象,函數等等,這個本身不動態,但是如果嵌入V8引擎,那個通過js腳本,可以配合已有的C++代碼就可以很方便的完成類似插件的功能,在線熱更新功能等等,這個跟做游戲的嵌入lua腳本,Python腳本也是類似的。

1、  V8的嵌入

這個只需要參考HelloWorld例子即可,代碼在v8/samples目錄下。

2、  函數模板與對象模板

FunctionTemplate和ObjectTemplate都繼承Template,並且最上層父基類是Data類,而Data類是v8里所有值(class Value)和模板(class Template)的父類,是一個superclass.

FuntionTemplate,ObjectTemplate與Object的關系是:

如上圖,通過對應的函數接口生成Object對象,該對象就是v8解釋器里實際操作的對象。

為了避免繁雜的文字描述,以下舉一些實際的code來說明如何來實際使用:

以下代碼都是同步最新的chromium v8版,網上很多實例都是已經過時不能參考了。

(1)JS對象的創建:

(2)JS類的創建:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM