webkit中的javascript(1)---javascript函数调用在webkit中的实现

本文探讨了JavaScript函数在WebKit引擎中的实现细节,重点解析了函数调用的过程,包括构造函数、原型、定时器以及对象操作等方面的知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

javascript函数调用如何实现的?

#########################################################################################

by zevolo

JS 的object有三种,Javascript的内部对象,browser的对象,html dom的对象。js object有很多属性和方法,webkit支持绝大多数,只有极少没有支持,并且扩充了额外的属性和方法。
其中Javascript的内部对象在Source/JavascriptCore/runtime中实现。对于一种对象,一般有三个对象和其他的辅助对象来实现,如Number,有object, prototype, 和constructor,其中prototype的父类是object(这部分代码还不是很一致,object的名字不一样,如NumberObject,DateInstance,JSArray等,但都是这种结构,也许webkit以后会调整)
对象的属性在constructor中定义,而方法在prototype中定义
Browser和html的对象在DeriveSources/WebCore中定义,一般也有prototype和constructor(有的没有)

在DeriveSources的javascript对象,webkit通过idl生成具体的js的对象bindings,如js的Window对象通过Window.idl生成JSDOMWindow来实现,
其中JSDOMWindowTableValues定义了属性,JSDOMWindowPrototypeTableValues定义了方法

#########################################################################################
javascript的window::setInterval的内部实现
调用序列图如下:
javascript的setInterval
-->jsDOMWindowPrototypeFunctionSetInterval
-->JSDOMWindow::setInterval
-->DOMWindow::setInterval
-->DOMTimer::install(context, action, timeout, false);
#########################################################################################


WebCore的timer实现
最基本有几个类,
    --TimerBase
    --ThreadTimers
        包含TimerBase的heap堆和SharedTimer的指针
    --SharedTimer

--TimerBase有一些子类,如-->SuspendableTimer-->DOMTimer, Timer等
    setNextFireTime() timer开始的时候,都要调用这个函数,这里把具体的timer更新或者插入到ThreadTimers的堆中
    fired() 纯虚函数
--ThreadTimers
    updateSharedTimer() start timer
    sharedTimerFired() fired函数,设置为内部的SharedTimer的callback函数
--SharedTimer
    实现依赖具体的平台,如mac, gtk, qt等
    有两个具体的实现MainThreadSharedTimer和WorkerSharedTimer


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值