Добавить атрибут класса с помощью декоратора

Я пытаюсь использовать декоратор, чтобы добавить какой-либо метод или свойство в аннотированный класс.

Это мой декоратор:

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;

Есть идеи?


person Scandinave    schedule 16.06.2017    source источник
comment
Декораторы — это предложение (т. е. экспериментальное). Они не являются частью ES6 или любой другой версии языка.   -  person Felix Kling    schedule 16.06.2017
comment
Да я не то. Это неправильное написание. Но ты мне не поможешь :)   -  person Scandinave    schedule 16.06.2017
comment
Но вы мне не поможете Что ж, теперь вы сможете использовать правильный контекст, говоря о декораторах, и другие поймут, что вы имеете в виду :)   -  person Felix Kling    schedule 16.06.2017


Ответы (1)


Вы изменяете сам объект класса, т.е.

App.template // your template is here

и в этом случае вы только что определили статическое свойство для класса приложения.

Чтобы установить шаблон для экземпляров класса, вы должны использовать:

target.prototype.template = params.template;

(Хороший пример того, что классы на самом деле являются просто синтаксическим сахаром над функциями конструктора и наследованием на основе прототипов).

Кроме того, я думаю, что эта статья о сочетании примесей и декораторов могла бы оказаться полезным.

person idmitme    schedule 16.06.2017
comment
Я не знаю, почему я не подумал об этом раньше. Спасибо, это решение. Я уже читал эту статью. Но я не понимаю, как я могу передать параметр миксину? - person Scandinave; 17.06.2017