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

chromium源码阅读--V8 Embbeding的更多相关文章
- [原创]chromium源码阅读-进程间通信IPC.消息的接收与应答
chromium源码阅读-进程间通信IPC.消息的接收与应答 chromium源码阅读-进程间通信IPC.消息的接收与应答 介绍 chromium进程间通信在win32下是通过命名管道的方式实现的 ...
- chromium源码阅读--Browser进程初始化
最近在研读chromium源码,经过一段懵懂期,查阅了官网和网上的技术文章,是时候自己总结一下了,首先IPC message loop开始吧,这是每个主线程必须有的一个IPC消息轮训主体,类似之前的q ...
- chromium源码阅读--HTTP Cache
最近积累了一些关于HTTP缓存的知识,因此结合Chromium的实现总结一下,主要从如下2个分面: 1.HTTP缓存的基础知识 2.Chromium关于HTTP缓存的实现分析 一.HTTP缓存的基础知 ...
- chromium源码阅读--进程的Message Loop
上一篇总结了chromium进程的启动,接下来就看线程的消息处理,这里的线程包含进程的主进程. 消息处理是由base::MessageLoop中实现,消息中的任务和定时器都是异步事件的. 主要如下几点 ...
- chromium源码阅读--进程间通信(IPC)
第一篇就有提到Chromium是目前默认是采用多进程架构,当然,chromium有singe-process的版本. 多进程与多线程的区别,确实有很多可以讲的,我的另一篇博客也讲了一些,这里是从浏览器 ...
- chromium源码阅读--图片处理
JavaScript 图像替换 JavaScript 图像替换技术检查设备能力,然后“做正确的事”. 您可以通过 window.devicePixelRatio 确定设备像素比,获取屏幕的宽度和高度, ...
- chromium源码阅读
linux下chromium的入口函数在文件:src/chrome/app/chrome_exe_main_aura.cc 中 int main(int argc, const char** argv ...
- Chromium源码系列一:Chromium简介及源代码获取和编译
Chromium源码系列一:Chromium简介及源代码获取和编译 Chromium简介 Chromium是一个由Google主导开发的网页浏览器,以BSD许可证等多重自由版权发行并开放源代码.C ...
- chromium浏览器开发系列第三篇:chromium源码目录结构
上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠 ...
随机推荐
- 模块socket使用
什么是socket:socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.我们无需再去深入理解tcp/udp协议,按照socket的规定去使用就行了. 首先一个c/s架构:分为两 ...
- LayaBox进阶之UI管理器
自己动手写框架的话,UI管理器是最基础的一部分: 打开界底层是addChild打开的: 新建一个UIManager export class UIManager { private mainC ...
- Cython中def,cdef,cpdef的区别
这是我的第一篇翻译,希望大家多多给出意见和建议. 如有转载,请注明出处. 原文来自:https://stackoverflow.com/questions/28362009/definition-of ...
- 误删 EhCache 中的数据?
最近遇到一个问题:在使用ehcache时,通过CacheManager.getCache(chachename).get(key),获取相应的缓存内对象(当时这个对象是个list), 有个同事写个方法 ...
- Learning Experience of Big Data:The First Day-Try to set up a network connection on my virtural machine
After we install our virtual machine,the first thing we should do is to set up a network connection ...
- 软件的按契约设计(DbC---Design by Contract)
一.DbC基本概念 DbC的思想源于商业活动中商家和用户的行为(义务和利益关系),双方都要遵守一个契约(合同),交易才能完成. 商家与用户的契约关系如下: 1. 商家必须提供某种产品(义务),并有权获 ...
- ruby 第三方模块unirest使用
Creating Requests require 'unirest' response = Unirest.post 'http://httpbin.org/post', headers:{ Acc ...
- 网站漏洞修复之最新版本UEditor漏洞
UEditor于近日被曝出高危漏洞,包括目前官方UEditor 1.4.3.3 最新版本,都受到此漏洞的影响,ueditor是百度官方技术团队开发的一套前端编辑器,可以上传图片,写文字,支持自定义的h ...
- (数据科学学习手札05)Python与R数据读入存出方式的总结与比较
在数据分析的过程中,外部数据的导入和数据的导出是非常关键的部分,而Python和R在这方面大同小异,且针对不同的包或模块,对应着不同的函数来完成这部分功能: Python 1.TXT文件 导入: 以某 ...
- [BZOJ1040][ZJOI2008]骑士(树形DP)
对于一个联通块内,有且只有一个环,即n个点n条边 那么找到那个环,然后任意断一条边,这个联通块就变成一棵树了,然后做树形DP就行了 对于断的边要记录下来DP时特判 Code #include < ...