我正在装饰一个类来为它的构造函数提供参数,当我尝试子类化这个类时会出现问题:
@decorate('foo', 'bar')
class Foo {
constructor(foo, bar) {}
}
class Bar extends Foo {}
function decorate(foo, bar) {
return function(ctor) {
return ctor.bind(null, foo, bar);
};
}
由于传递给构造函数的null
上下文,上面的工作不会起作用(至少我认为这是问题的根源)。与Babel一起使用时,会出现以下错误:"对象原型可能只是一个Object或null:undefined"
有没有办法同时装饰父类并扩展子类?
答案 0 :(得分:1)
尝试扩展通过.bind
创建的功能对您不起作用。绑定函数有很多特殊的逻辑。绑定函数没有.prototype
属性,这意味着扩展绑定函数意味着没有原型链可以遵循。实现这个装饰器的正确方法是
function decorate(foo, bar) {
return ctor => class extends ctor {
constructor(...args){
super(foo, bar, ...args);
}
};
}