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对象进行链接。