zoukankan      html  css  js  c++  java
  • 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类的创建:

  • 相关阅读:
    Oracle与MySQL的几点区别
    MySQL使用Union创建视图报错
    MySQL指定mysqld启动时所加载的配置文件
    MySQL使用位运算
    django rest framework(3)
    Django Rest Framework(2)
    Django 之缓存
    RESTful API
    restful framework 认证源码流程
    其他排序
  • 原文地址:https://www.cnblogs.com/danxi/p/8377331.html
Copyright © 2011-2022 走看看