使用装饰器添加 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 关于组合混合和装饰器可能会有帮助。