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類的建立:
