0

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

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

这适用于 99%,除非我没有this绑定(或错误的绑定,例如 for Function.prototype.apply())。

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

4

1 回答 1

0

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

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

于 2017-09-25T13:02:45.993 回答