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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值