あなたの問題はほとんどが文体的であるので(宣言の束でコンストラクタをいっぱいにしたくない)、それはスタイル的にも解決することができます。
私がそれを見ると、多くのクラスベースの言語では、コンストラクターはクラス名自体にちなんで名付けられた関数です。文体的には、それを使用して、文体的にはまだ理にかなっているが、コンストラクターで行われている一般的なアクションを、実行しているすべてのプロパティ宣言でグループ化しないES6クラスを作成できます。単に実際のJSコンストラクターを「宣言領域」として使用し、次に「その他のコンストラクタースタッフ」領域として扱う関数という名前のクラスを作成し、真のコンストラクターの最後で呼び出します。
「厳格に使用」;
クラスMyClass
{
//プロパティを宣言してからthis.ClassName();を呼び出すだけ ここから
コンストラクタ(){
this.prop1 = '何とか1';
this.prop2 = '何とか2';
this.prop3 = '何とか3';
this.MyClass();
}
//他のあらゆる種類の「コンストラクタ」のもの。宣言でごちゃごちゃにならない
私のクラス() {
doWhatever();
}
}
新しいインスタンスが構築されると、両方が呼び出されます。
Sortaは、宣言と実行するその他のコンストラクターアクションを分離する2つのコンストラクターを持っているようなものであり、それが起こっていることをスタイル的に理解することも難しくありません。
多くの宣言やインスタンス化で発生する必要のある多くのアクションを処理し、2つのアイデアを互いに区別したい場合は、このスタイルを使用すると便利です。
注:「初期化」の一般的な慣用的なアイデア(init()
またはinitialize()
メソッドなど)は、意図的に使用しないでください。構築と初期化の考えには、ある種の推定される違いがあります。コンストラクターを操作すると、インスタンス化の一部として自動的に呼び出されることがわかります。init
多くの人が一目見ずに、の形式に沿って何かをする必要があると思い込むメソッドを見ると、var mc = MyClass(); mc.init();
それが通常の初期化方法です。私はクラスのユーザーのための初期化プロセスを追加しようとしていないよ、私が追加しようとしているにクラス自体の建設プロセス。
一部の人々は一瞬ダブルテイクをするかもしれませんが、それは実際には少し重要です。それは、意図が建設の一部であることを彼らに伝えます。 ES6コンストラクターのしくみ」と実際のコンストラクターをもう一度見て、「ああ、彼らはそれを一番下に呼びます」と言います。これは、その意図を伝えない(または誤って伝える)ことよりもはるかに優れており、おそらく多くのそれを間違って使用し、外部やジャンクから初期化しようとしています。それは私が提案するパターンに非常に意図的です。
そのパターンにしたくない人のために、正反対も機能することができます。最初に宣言を別の関数にファームします。「プロパティ」や「publicProperties」などの名前を付けます。次に、残りのものを通常のコンストラクターに入れます。
「厳格に使用」;
クラスMyClass
{
プロパティ() {
this.prop1 = '何とか1';
this.prop2 = '何とか2';
this.prop3 = '何とか3';
}
constructor(){
this.properties();
doWhatever();
}
}
この2番目のメソッドは見た目がきれいに見えるかもしれませんが、properties
このメソッドを使用する1つのクラスが別のクラスを拡張するときにオーバーライドされるという固有の問題もあります。それproperties
を回避するには、より一意の名前を付ける必要があります。最初のメソッドにはこの問題はありません。コンストラクターの偽の半分はクラスにちなんで一意に名前が付けられているためです。
this.member = member
あなたのコンストラクタで20〜30のパラメータで繰り返しがあるということですか?