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來添加的,而且這一切都是能夠動態添加(這感受太酸爽~)哦。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類的建立:

相關文章
相關標籤/搜索