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來添加的,而且這一切都是能夠動態添加(這感受太酸爽~)哦。google
嗯,經過C++來給V8解釋器添加新的類,對象,函數等等,這個自己不動態,可是若是嵌入V8引擎,那個經過js腳本,能夠配合已有的C++代碼就能夠很方便的完成相似插件的功能,在線熱更新功能等等,這個跟作遊戲的嵌入lua腳本,Python腳本也是相似的。lua
一、 V8的嵌入prototype
這個只須要參考HelloWorld例子便可,代碼在v8/samples目錄下。插件
二、 函數模板與對象模板3d
FunctionTemplate和ObjectTemplate都繼承Template,而且最上層父基類是Data類,而Data類是v8裏全部值(class Value)和模板(class Template)的父類,是一個superclass.code
FuntionTemplate,ObjectTemplate與Object的關係是:
如上圖,經過對應的函數接口生成Object對象,該對象就是v8解釋器裏實際操做的對象。
爲了不繁雜的文字描述,如下舉一些實際的code來講明如何來實際使用:
如下代碼都是同步最新的chromium v8版,網上不少實例都是已通過時不能參考了。
(1)JS對象的建立:
(2)JS類的建立: