Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为链接类方法实现JS装饰器_Javascript_Ecmascript Next - Fatal编程技术网

Javascript 为链接类方法实现JS装饰器

Javascript 为链接类方法实现JS装饰器,javascript,ecmascript-next,Javascript,Ecmascript Next,如何实现使类的所有方法自动可链接的装饰器 我有以下课程: class MyClass { async foo() { console.log(1); } async bar() { console.log(2); } } 我希望能够做到以下几点: @chainableMethods class MyClass { ... } const myInstance = MyClass(); myInstance .foo() .bar(); 你可以试试这个 function

如何实现使类的所有方法自动可链接的装饰器

我有以下课程:

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
的承诺得到解决后才运行
bar
,那么我认为这是不可能的。

我认为您想要的是结果| | |这不需要排列,只需使用arguments关键字。如果有多个参数,请使用排列。最初我没有
结果| |
,但添加了它,以防有一个函数返回有用的东西。在这种情况下,最好在系统中有一个错误,而不是盲目地链接事件。这是行不通的。不能使用箭头函数创建(prototype)方法,也不应返回prototype对象进行链接。