实现用于链接类方法的 JS 装饰器

Jea*_*esi 5 javascript ecmascript-next

我怎样才能实现一个装饰器,使一个类的所有方法都可以自动链接?

我有以下课程:

class MyClass {
  async foo() { console.log(1); }
  async bar() { console.log(2); }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做到以下几点:

@chainableMethods
class MyClass {
  ...
}

const myInstance = MyClass();

myInstance
  .foo()
  .bar();
Run Code Online (Sandbox Code Playgroud)

var*_*wal -1

你可以试试这个

function chainableMethods (constructor) {
  let funcs = Object.getOwnPropertyNames(constructor.prototype);
  for (var i in funcs) {
    let func = funcs[i];
    let oldFunc = constructor.prototype[func];
    constructor.prototype[func] = (...args) => {
      let result = oldFunc.apply(this, args);
      return result || constructor.prototype;
      // Using 'result ||' for cases when a function does return something useful
      // You can remove it if it doesn't suit your requirement. 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你打算在bar承诺foo得到解决之后才跑步,那么我认为这是不可能的。