使用装饰器添加class属性

时间:2017-06-16 19:38:25

标签: javascript babeljs decorator ecmascript-next

我尝试使用装饰器将一些方法或属性添加到带注释的类中。

这是我的装饰者:

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 {}

但是当我使用这个课时:

app.template // undefined;

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您正在修改类对象本身,即

App.template // your template is here

在这种情况下你刚刚为App类定义了一个静态属性。

要为类实例设置模板,您应该使用:

target.prototype.template = params.template;

(很好的例子,类实际上只是构造函数和基于原型的继承的语法糖。)

另外,我认为this article关于组合mixins和decorator可能会有所帮助。