这是一个更普遍的问题。我之前看到过一些与之相关的答案,但没有人给我一个明确的答案。
我想实现自动绑定功能。
示例:
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,如果它有任何相关性。
答案 0 :(得分:2)
不幸的是,您想要调用它的方式不起作用。原因如下:
当您调用handle(handler.handlerFunction)
时,您传递的参数是对函数的引用。有关处理程序的任何信息都会丢失。你可以这样做:
handle("my arg", handlerFunction.bind(handler));
或者这个:
handler.handlerFunction = handler.handlerFunction.bind(handler);
handle("my arg", handler.handlerFunction);
答案 1 :(得分:0)
出于某种充分的理由,在JavaScript中根本就没有这样的东西。
相反,正如您已经提到的,传入上下文变量并将回调应用于它,以便它在所有者上下文中运行。这通常用于许多框架等......