在JavaScript中转发功能?

时间:2013-11-20 15:21:49

标签: javascript node.js

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

我只想拍摄view函数而不是修改,所以我尝试分配函数:

core.db.view = bucket.view;

该功能似乎有效,但存在HTTP错误。如果我包装函数,一切正常,但我更喜欢只分配函数。

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

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

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

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方法与你自己包装函数的方式类似。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

答案 1 :(得分:2)

在Javascript中

obj.method();

var m = obj.method; m();

是不同的事情。更具体地说,在两种情况下,执行方法体的this值是不同的:在第一种情况下this将是obj,在第二种情况下this var m = function(){return obj.method()}; 1}}将成为全局对象。

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

{{1}}