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

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

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