2

这是一个更普遍的问题。我以前看过一些与之相关的答案,但没有一个给我明确的答案。

我想实现一个自动绑定功能。

例子:

var someObject;
var handle = function(arg1, callback){
   someObject(arg1, callback.bind(???owner of callback???))
}

var handler = new Handler();    

//Calling it
handle("my arg", handler.handlerFunction);

我无法控制调用回调的 someObject 方式,因为它是第三方库,并且它通过引用自身来调用我的回调,所以我不能在我的原型定义中使用它。

我可以通过在处理程序中发送并绑定到它的句柄函数使用额外的参数来轻松实现这一点。

或者将 handler.handleFunction 包装到一个应用块中,但我认为如果我可以按照我在代码块中提到的方式调用它会更好看。

是否可以找到对拥有 handlerFunction 的对象的引用?

我正在使用 Nodejs,如果这有任何相关性。

4

2 回答 2

2

不幸的是,您要调用它的方式不起作用。原因如下:

当您调用handle(handler.handlerFunction)参数时,您传递的是对函数的引用。有关处理程序的任何信息都在那里丢失。你可以这样做:

handle("my arg", handlerFunction.bind(handler));

或这个:

handler.handlerFunction = handler.handlerFunction.bind(handler);
handle("my arg", handler.handlerFunction);
于 2013-09-27T08:54:09.140 回答
0

出于某种充分的理由,在 JavaScript 中根本没有类似的东西。

相反,正如您已经提到的,传入一个上下文变量并将您的回调应用到它,以便它在所有者上下文中运行。这通常用于许多框架等......

于 2013-09-27T08:52:43.117 回答