webkit中的javascript(3)---javascript在webkit内部实现结构
2012-09-24 20:11
411 查看
by zevolo
Javascript如何访问内部属性或者方法呢?以Number对象为例,webkit内部的类图结构参见图。
对象的父类JSCell包含着一个内部的Structure对象。首先在sturcture内部的有一个指针m_propertyTable,对于这个对象自身的属性(在javascript表现为属性和方法),是通过m_propertyTable来管理的。通常这些属性关系>在JSGlobalObject::reset中初始化,可以通过JSGlobalData(m_propertyTable)来存放和读取。其次structure内部有一个指针prototype,JSObject可以通过这个指针来查找自身的prototype。如图中,Number的prototype指向NumberPrototype,NumberPrototype的prototype指向ObjectPrototype,ObjectPrototype指向NULL。这样就构成了一个prototype链。通过这两点,JSObject就可以通过查询的方法(如下代码)来查找属性。在getPrototypeSlot()中,fastGetOwnPropertySlot()是查找自身是否具有某种属性。
Javascript如何访问内部属性或者方法呢?以Number对象为例,webkit内部的类图结构参见图。
对象的父类JSCell包含着一个内部的Structure对象。首先在sturcture内部的有一个指针m_propertyTable,对于这个对象自身的属性(在javascript表现为属性和方法),是通过m_propertyTable来管理的。通常这些属性关系>在JSGlobalObject::reset中初始化,可以通过JSGlobalData(m_propertyTable)来存放和读取。其次structure内部有一个指针prototype,JSObject可以通过这个指针来查找自身的prototype。如图中,Number的prototype指向NumberPrototype,NumberPrototype的prototype指向ObjectPrototype,ObjectPrototype指向NULL。这样就构成了一个prototype链。通过这两点,JSObject就可以通过查询的方法(如下代码)来查找属性。在getPrototypeSlot()中,fastGetOwnPropertySlot()是查找自身是否具有某种属性。
ALWAYS_INLINE bool JSObject::getPropertySlot(ExecState* exec, PropertyName propertyName, PropertySlot& slot) { JSObject* object = this; while (true) { if (object->fastGetOwnPropertySlot(exec, propertyName, slot)) return true; JSValue prototype = object->prototype(); if (!prototype.isObject()) return false; object = asObject(prototype); } }
相关文章推荐
- JavaScript实现类Java的Map结构
- JavaScript 内部对象结构
- Webkit中HTML5 Video的实现分析 (一) - 基本结构及HTMLMediaElement & MediaPlayer
- javascript+css简单实现树形结构列表
- Javascript实现Map结构
- javascript实现扁平数组构建树形结构(多级菜单应用)-优化
- squid内部结构及实现剖析
- 黑马程序员--09.动态与代理AOP--04【推理动态代理类内部结构I】【InvocationHandler实现类的具体写法】
- JavaScriptCore, WebKit的JS实现简介
- Node.js环境下JavaScript实现单链表与双链表结构
- 在SQL Server中巧妙存储树形结构数据及ASP.Net javaScript无刷新树形GridView的实现
- 操作系统 - Linux进程实现的内部结构
- 用JavaScript实现一个简单的树结构
- 无限级菜单结构 与 Javascript 实现算法, 类 XMenu by shawl.qiu
- JavaScript面向对象方式实现栈结构的字符串逆序
- 临界区的内部结构与实现
- 操作系统 - Linux进程实现的内部结构
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)
- 数据结构之 JavaScript实现栈
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)