2016-09-22 10 views
2

私は他のメソッドを呼び出すメソッドを持つクラスを持っている:ES6:クラスにメソッドがある場合?

class MyClass { 
    build(methods) { 
    methods.forEach((method) => { 
     if (this.method) { 
     this.method(); 
     } 
    }); 
    } 

    stuff() {} 
    moreStuff() {} 
} 

const a = MyClass(); 
a.build(['stuff', 'moreStuff']); 

私はクラスのための特別な方法上の任意の参照を見つけることができませんでした。私の最初の考えはhasOwnPropertyでした(ただし、クラス内で使用しないでください)。上記のアプローチは、クラスに組み込み関数があるため、確実に動作しません。

私はまた私の救いであるとして、おそらくReflectを見ていたが、私は本当にこのシナリオのためのベストプラクティスであるかについて、いくつかのガイダンスを使用することができますか?

+0

が私たちを表示する 'build'、してください – Bergi

+0

「*クラスのための特別な方法には言及*」 - クラスは何も特別ではない、との特別な方法を必要としないので、それはです。それらは常に '.prototype'オブジェクトを持つコンストラクタ関数です(プロトタイプのメソッドは列挙できません)。 – Bergi

+0

@Bergi私は理解しています、彼らは構文的な砂糖ですが、私は本当に彼らがいくつかのクールなイントロスペクション方法を持っていることを望んでいました。コードを更新しました。私はリファクタリングし、 'build'メソッドを関数に分けて、ある種の' Reflect'を使うべきだと思います。 –

答えて

3

は、私はクラスについての特別なものは何もありませんあなたは

build (methodnames) { 
    for (const methodname of methodnames) { 
     if (typeof this[methodname] == "function") { 
      this[methodname](); 
     } 
    } 
} 

を探していると思います - そして実際に、あなたはそれらを無視すべきです。メソッドを呼び出す場合は、プロパティ値としての関数があることだけが重要です。メソッドがインスタンスを作成したクラスのプロトタイプオブジェクトの独自のプロパティであるかどうかは関係ありません。あなたがコールするつもりか

+0

クラス内でこのビルドメソッドを持つのは、パターンを別の関数に分ける必要がありますか? –

+0

'build'(すなわち' VARのnewInstance = MyClass.build(...) ')私には' static'方法のように聞こえるが、あなたがそれを書いた(または私は私の答えでそれを書いた)方法、それだけで、インスタンスのメソッド、それはクラスで完全に良いです – Bergi

+0

ありがとう!それは私に前進する自信を与えます。私は後でこれ以上のことを読んで、新しいクラスの機能を出したかっただけです。 –

関連する問題