如何为duktape编写中央函数调度程序?

时间:2017-09-25 13:00:02

标签: duktape

情况是这样的:我想对我在对象+原型上定义的所有函数使用单个duktape / C函数。为此,我有一个函数映射,它接受函数名称和回调(实际上是std::function),并且可以轻松地进行一些常见的处理并具有更简单的回调(甚至可以使用就地lambdas)。

这已经很好地解决了一个问题:在不同对象上使用相同的命名函数。为了消除歧义,我现在使用对象的堆指针(或原型,也是一个对象)作为进一步的限定符。因此,当调用我的中心duktape / C函数时,我首先查看函数是否为全局函数(即在全局对象上定义)。如果失败,我得到this绑定并使用其堆指针进行查找。如果这也失败了,我走原型链,看看我是否可以在其中一个原型上找到该功能。

除了我没有this绑定(或者错误的绑定,例如Function.prototype.apply())的情况外,这种效果很好,达到99%。

我的问题是:如何在我的中央duktape / C回调中获取函数的原始原型?

1 个答案:

答案 0 :(得分:0)

答案比我想象的要简单。对于该中央函数映射,您需要具有函数名称。当您在对象或原型上定义新函数时,必须将其设置为您创建的函数对象的属性。

可以将相同的方法用于原始对象/原型。只需将一个后向引用作为另一个属性添加到您的函数对象(例如" ptr")。通过它,您不仅可以轻松获得函数的名称,还可以获得其执行的上下文。因为我们已经有了正确的对象/原型,所以不需要继承链。