子类化装饰 JavaScript Class
Subclassing a decorated JavaScript Class
我正在装饰一个 class 来为其构造函数提供参数,当我尝试子 class this class:
时出现问题
@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 一起使用时,会出现以下错误:“对象原型只能是对象或空值:未定义”
有没有办法既装饰父 class 又扩展子?
尝试扩展通过 .bind
创建的函数对您来说是行不通的。绑定函数周围有大量特殊逻辑。绑定函数没有 .prototype
属性,这意味着扩展绑定函数意味着没有可遵循的原型链。实现这个装饰器的正确方法是
function decorate(foo, bar) {
return ctor => class extends ctor {
constructor(...args){
super(foo, bar, ...args);
}
};
}
我正在装饰一个 class 来为其构造函数提供参数,当我尝试子 class this class:
时出现问题@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 一起使用时,会出现以下错误:“对象原型只能是对象或空值:未定义”
有没有办法既装饰父 class 又扩展子?
尝试扩展通过 .bind
创建的函数对您来说是行不通的。绑定函数周围有大量特殊逻辑。绑定函数没有 .prototype
属性,这意味着扩展绑定函数意味着没有可遵循的原型链。实现这个装饰器的正确方法是
function decorate(foo, bar) {
return ctor => class extends ctor {
constructor(...args){
super(foo, bar, ...args);
}
};
}