2016-04-12 18 views
0

は、通常、次の構文を使用して関数を飾る:@構文を使用せずにES6クラスメソッドをデコレートしますか?

@decorate 
function x() { 
    console.log('wow am I decorated') 
} 

しかし流れは、まだこの構文をサポートしていません。簡単な回避策はあなたができることです。

const x = decorate(function() { 
    console.log('wow am I decorated') 
}) 

しかし、私はどのようにクラス内で同じ結果を達成できますか?

class plsWork { 
    how2decorate() { 
    console.log('why can I not be decorated :sob:') 
    } 
} 

答えて

2

あなたは、現在の標準に準拠していないので、あなたは、クラスのプロパティを使用することができます。

class plsWork { 
    constructor() { 
    this.how2decorate = decorate(() => { 
     console.log('why can I not be decorated :sob:') 
    }); 
    } 
} 

class plsWork { 
    how2decorate = decorate(function() { 
    console.log('why can I not be decorated :sob:') 
    }) 
} 

もう一つの方法は、transpilerは、とにかく最初のソリューションで何をするかである、コンストラクタにメソッドを追加することです

+0

偉大な答え!そして、実際にハハを投稿する前に質問を読んでくれてありがとう。 – m0meni

+1

@ AR7クラス定義の直後に 'plsWork.how2decorate = decorate(plsWork.how2decorate)'と言うこともできます。それは静的メソッドにも有効です。 – Nikita

+0

@ニキータなぜあなたは関数にプロパティを追加しますか? – zeroflagL

4

何もする必要はありません。メソッドデコレータは.flowconfigオプションesproposal.decorators=ignoreでサポートされています。

クラスデコレータのサポートはpulled in todayとなり、次のリリースにする必要があります。

+0

ああ、知っておいてよかった! .flowconfigオプションは以前より私にとってはうまくいきませんでしたが、新しいサポートは有望です – m0meni

関連する問題