通过JavaScript Binding添加新DOM对象的三种方式及实作
http://blog.youkuaiyun.com/horkychen/article/details/7640052
DOM对象有三种型态:
a. 寄生于现有对象,单实例。
从属于某个全局对象,访问时透过宿主对象完成。如document.object或window.object, 也可以直接调用object.method.这个实现最为简单,按需分配,并且随着宿主对象释放就可以了。主要参考window的Navigator实现。
b. 和window、document一样成为全局对象,单实例。
这个实现最为复杂,且还没有看到相关文档说明。关键要将对象在合适的位置创建,并更新到JSC的堆中才能达到功能。可以参考document的实现,并且需要考虑执行流程,必须对代码做过一些了解,才可能知道相关的改动量。
c. 多实例对象。可以在脚本中使用new创建。
为JavascriptCore添加自定义对象: http://www.cnblogs.com/baizx/archive/2010/08/17/1801662.html
只需在GlobalObject的构造函数添加一行:
putDirect(Identifier(globalExec(), "MyMath"), new (globalExec()) MyMathObject(globalExec(), MyMathObject::createStructure(d()->objectPrototype)), DontEnum | DontDelete);
就可以直接访问MyMath全局变量了,思路非常简单,就是要添加一个属性到全局访问空间,第一参数是名字,第二个参数是创建的对象。
所有的属性都必须是JSObject的实例,因此MyMathObject实际上继承与JSObject。
这时只是添加了一个MyMath变量,但是MyMathObject的定义并不知道,要添加自定义的功能就必须完善这个MyMathObject类