Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取javascript函数的所有者对象_Javascript_Node.js - Fatal编程技术网

获取javascript函数的所有者对象

获取javascript函数的所有者对象,javascript,node.js,Javascript,Node.js,这是一个更一般的问题。我以前见过一些与之相关的答案,但没有一个能给我一个明确的答案 我想实现一个自动绑定功能 例如: var someObject; var handle = function(arg1, callback){ someObject(arg1, callback.bind(???owner of callback???)) } var handler = new Handler(); //Calling it handle("my arg", handler.h

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

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

例如:

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方式,因为它是第三方库,并且调用回调时引用了自身,所以我不能在原型定义中使用它

通过向handle函数发送一个额外的参数并绑定到它,我可以很容易地实现这一点

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

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


我使用的是Nodejs,如果这有任何关联的话。

出于某种原因,JavaScript中根本没有类似的东西


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

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

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

handle("my arg", handlerFunction.bind(handler));
或者这个:

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

谢谢你的回复,我想我不得不选择其他的方法。将处理程序传递给handlerfunction感觉很不自然,因为它是在该对象中定义的allready。嗨,我理解传递上下文对象可能是一种常见的方法,但正如我在Tibos answer上所评论的,将处理程序实际传递回处理程序中定义的函数感觉很不自然。