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