webkit中的javascript(3)---javascript在webkit内部实现结构

来源:互联网 发布:淘宝卖家怎么更改类目 编辑:程序博客网 时间:2024/03/29 01:14

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()是查找自身是否具有某种属性。


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);    }}


原创粉丝点击