JavaScript中的转发功能

Forwarding functions in JavaScript?

本文关键字:功能 转发 JavaScript      更新时间:2023-09-26

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

view函数我只想照原样使用,不想修改,所以我尝试分配函数:

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);

附言:bind方法的工作原理与您自己包装函数的方式类似。

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

在Javascript 中

obj.method();

var m = obj.method; m();

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

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

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