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

标签 javascript ecmascript-next

我如何实现一个使类的所有方法自动链接的装饰器?

我有以下类(class):

class MyClass {
  async foo() { console.log(1); }
  async bar() { console.log(2); }
}

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

@chainableMethods
class MyClass {
  ...
}

const myInstance = MyClass();

myInstance
  .foo()
  .bar();

最佳答案

你可以试试这个

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. 
    }
  }
}

如果您打算仅在 foo 的 promise 得到解决后才运行 bar,那么我认为这是不可能的。

关于javascript - 实现用于链接类方法的 JS 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54757815/

相关文章:

javascript - 单击确认对话框按钮时如何返回 true 或 false?

javascript - 如何通过 javascript 访问 processing.js 变量

javascript - 如何仅替换字符前后的空格而不是数字前后的空格

javascript - 对象传播未给出预期结果

javascript - ES6/ES7 中 'optional' 对象键的简洁/简洁语法?

javascript - React中箭头函数的正确使用

javascript - 使用 ES2016 在 React 中的箭头函数中调用 setState 时未安装组件

javascript - 诺基亚这里 map 热图覆盖漏洞

javascript - ES6 : Accessing static member variables in classes created from Mixin

javascript - 由 jQuery 自动生成的多个复选框列表