使用类方法的部分应用程序

Partial application using class method

提问人:Nick Bull 提问时间:9/3/2020 最后编辑:Nick Bull 更新时间:9/3/2020 访问量:40

问:

假设我有以下内容:

class A {
  _a = 3

  method(arg) {
    return arg + this._a;
  }
}

我创建了一个部分应用程序,如下所示:

const part = function (fn) {
  return function (arg) {
    return fn(arg);
  }
}

我按如下方式应用:

const a = new A();
const newFn = part(a.method, 5);

它抛出一个错误,即 .所以我知道我可以绑定函数:this is undefined

const newFn = part(a.method.bind(a), 5);

然后它会起作用,但这很糟糕!有没有办法在不传递上下文的情况下做到这一点?这包括不必将其作为参数传递(例如,,使用part(a, a.method, 5);bind)

请注意,实际上,我使用的是库中的类,所以很遗憾我无法重构它


只是为了扩展注释,这看起来像(没有解构,因为解构方法也会导致上下文问题:

const part = function (ctx) {
  return function (fn) {
    return function (arg) {
      return fn.bind(ctx, arg);
    }
  }
}

const a = new A();
const partA = part(a);

// Now for all methods with the class A context I can do
const newFn = partA(a.method, 5);
这将 绑定 ES6 类

评论

0赞 Nick Bull 9/3/2020
到目前为止,我倾向于解构 的方法,然后在部分应用程序中创建另一个层,使用 作为参数。如果可能的话,很乐意避免这种情况!aabind
0赞 Nick Bull 9/3/2020
事实证明,你甚至不能对类进行方法的解构。 :(

答: 暂无答案