在SpiderMonkey中产生可调用的对象

我应该对标题做一个更详细的解释:用C语言在SpiderMonkey中产生一个在JavaScript中可以当成函数被调用的对象,换句话说,就是一个非Function的对象,在JavaScript中可以被当成Function进行调用。例如,我有一个Hash对象,当我在var h = new Hash()之后,可以直接调用h(key),h并非一个函数对象,却可以以这种函数调用的方式来获取键key对应的值。

首先,必须要在创建这个Hash类的结构时,将JSClass中的”call”字段设置为相应的函数,如下:

现在,这里有一个很关键的问题便是如何在SpiderMonkey调用call_hash函数的时候,能够让call_hash函数知道被调用的对象(callee)是谁。然而,Mozilla的官方文档并没有对此作出任何解释。于是我在邮件列表中问了这个问题,有人给出了一个很特别的技巧——引擎调用call函数的时候,argv[-2]便是被调用者本身。


在把玩了Spidermonkey一段时间之后,我还是打算放弃spidermonkey,虽然这是一个很成熟很强大的脚本引擎,但是他的API还是有些混乱的,从本文的这个问题的解决方案就可以看得出来。

发表评论

电子邮件地址不会被公开。 必填项已用*标注