2017-06-16 20 views
1

デコレータを使用して、注釈付きクラスにメソッドやプロパティを追加しようとしました。デコレータでクラス属性を追加

これは私のデコレータです:

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

デコレータは*プロポーザル*(つまり実験的)です。 ES6や他のバージョンの言語には含まれていません。 –

+1

そうですね。スペルミスです。しかし、あなたは私を助けません:) – Scandinave

+1

*しかし、あなたは私を助けません*今、あなたはデコレータについて話すときに適切な文脈を使うことができ、他の人はあなたが意味することを知ります:) –

答えて

2

、すなわち

App.template // your template is here 

、あなたはちょうどこの場合にはアプリケーションクラスの静的プロパティを定義しました。

target.prototype.template = params.template; 

(クラスが実際にコンストラクタ関数とプロトタイプベースの継承を超えるだけの構文砂糖です良い例):あなたが使用する必要があり、クラスのインスタンス用のテンプレートを設定するために

また、mixinとデコレータを組み合わせることについては、this articleが参考になると思います。

+0

私はなぜか分からない私は以前これを考えなかった。これは解決策ですありがとうございます。私はすでにこの記事を読んでいます。しかし、私はmixinにパラメータを渡す方法を理解していないのですか? – Scandinave

関連する問題