您的位置:首页 > Web前端 > JavaScript

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

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: