使用装饰器添加 class 属性
Add class attribute with decorator
我尝试使用装饰器将一些方法或 属性 添加到带注释的 class。
这是我的装饰器:
export default function Component(params) {
return function decorator(target) {
target.template = params.template;
console.log(target, params.template);
}
}
我是这样使用的:
@Component({
template: template
})
export default class App {}
但是当我使用这个 class 时:
app.template // undefined;
有什么想法吗?
您正在修改 class 对象本身,即
App.template // your template is here
在这种情况下,您刚刚为 App class 定义了静态 属性。
要为 class 个实例设置模板,您应该使用:
target.prototype.template = params.template;
(很好的例子,classes 实际上只是构造函数和基于原型的继承的语法糖)。
此外,我认为 this article 关于组合混合和装饰器可能会有帮助。
我尝试使用装饰器将一些方法或 属性 添加到带注释的 class。
这是我的装饰器:
export default function Component(params) {
return function decorator(target) {
target.template = params.template;
console.log(target, params.template);
}
}
我是这样使用的:
@Component({
template: template
})
export default class App {}
但是当我使用这个 class 时:
app.template // undefined;
有什么想法吗?
您正在修改 class 对象本身,即
App.template // your template is here
在这种情况下,您刚刚为 App class 定义了静态 属性。
要为 class 个实例设置模板,您应该使用:
target.prototype.template = params.template;
(很好的例子,classes 实际上只是构造函数和基于原型的继承的语法糖)。
此外,我认为 this article 关于组合混合和装饰器可能会有帮助。