Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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,我正在为数据库API编写一个小包装器,以添加自定义功能 我只想保持原样而不是修改视图函数,因此我尝试分配函数: core.db.view = bucket.view; 该函数似乎可以工作,但存在HTTP错误。如果我包装函数,一切正常,但我更喜欢只分配函数 core.db.view = function (a, b, c) { return bucket.view(a, b, c); }; 有什么想法吗?下面两个调用之间的唯一区别是它们执行的上下文: core.db.view = buck

我正在为数据库API编写一个小包装器,以添加自定义功能

我只想保持原样而不是修改视图函数,因此我尝试分配函数:

core.db.view = bucket.view;
该函数似乎可以工作,但存在HTTP错误。如果我包装函数,一切正常,但我更喜欢只分配函数

core.db.view = function (a, b, c) {
  return bucket.view(a, b, c);
};

有什么想法吗?

下面两个调用之间的唯一区别是它们执行的上下文:

core.db.view = bucket.view;
bucket.view() // 'this' will be bucket
core.db.view() // 'this' will be core.db
解决方案:

core.db.view = bucket.view.bind(bucket);
PS:bind方法的工作原理与您自己包装函数的方式类似

在Javascript中

obj.method();

这是不同的事情。更具体地说,在两种情况下,执行方法主体期间的this值是不同的:在第一种情况下,这将是obj,在第二种情况下,这将是全局对象

解决方案正在将方法调用包装到闭包中:

var m = function(){return obj.method()};

也许您需要执行core.db.view=bucket.view.bindbucket;?请参阅MDN关于绑定的文章:。这是他已经拥有的解决方案。他正在寻找一种解决方案,不需要将其包装到一个新函数中。在我看来,从文本中,他/她不明白为什么仅仅分配函数不起作用。另外,bind基本上是包装函数,它也返回一个新的独立对象,在设置上下文后转发调用。
var m = function(){return obj.method()};