質問: trueを入れることができることを私は理解しています...しかし私は私のコンストラクタを「ジャンク」したくありません。私はこの問題に対処するために多くの方法を考えていましたが、まだ良いものを見つけていません。 (例:classconfigハンドラーを作成し、クラスとは別に宣言されたparameterオブジェクトを渡します。そうするとハンドラーはクラスにアタッチします。統合するためにweakmapsも考えました。)このような状況に対処するためにどのようなアイデアが必要ですか。
回答: あなたの問題は主に文体的なものであるため(コンストラクタをたくさんの宣言で埋めたくない)、それは文体的にも解決することができます。私の見方では、多くのクラスベースの言語はコンストラクタをクラス名自体にちなんで名付けられた関数にしています。スタイル的にはそれを使用して、文体的にはまだ意味のあるes6クラスを作成できますが、コンストラクター内で行われる典型的なアクションを、行っているすべてのプロパティ宣言とグループ化することはできません。実際のjsコンストラクタを単に「宣言領域」として使用してから、functionという名前のクラスを作成し、そうでなければ「その他のコンストラクタ要素」領域として扱い、それを実際のコンストラクタの最後で呼び出します。[厳密に使用];厳密に宣言するmyclass { //プロパティを宣言するだけでthis.classname();を呼び出すことができます。ここから constructor(){ this.prop1 = 'blah 1'; this.prop2 = 'blah 2'; this.prop3 = 'blah 3 '; this.myclass(); } //その他の「コンストラクタ」のあらゆる種類のもの。 ] myclass(){ dowhatever(); } } 両方とも新しいインスタンスが構築されると呼び出されます。宣言と実行したい他のコンストラクタのアクションを分けるために2つのコンストラクタを持つようにソートし、スタイル的に理解するのはそれほど難しいことではありません。多くの宣言やインスタンス化の際に起こる必要がある多くのアクションを扱い、2つのアイデアを互いに区別したい場合に使用するのがいいスタイルだと思います。 _ note _ :私は(init()やinitialize()メソッドのように)「初期化する」という典型的な慣用句をあまり意図的に使用しません。構築と初期化という考え方には、ある種の推定される違いがあります。コンストラクタを操作する人々は、それらがインスタンス化の一部として自動的に呼び出されることを知っています。 initメソッドを見ると、var mc = myclass(); mc.init();の形式に沿って何かをする必要があると一瞬もしないで前提とする人が多いでしょう。私はクラスのユーザーのために初期化プロセスを追加しようとしているのではなく、クラス自体の構築プロセスに to を追加しようとしています。ちょっとしたダブルテイクをする人もいるかもしれませんが、それは実際にはちょっとしたことです。意図が建設の一部であることを彼らに伝えます。 es6のコンストラクタがどのように機能するのか、そして実際のコンストラクタを見ていくためには、「ああ、それを一番下のほうで呼んでいます」と言っています。人々はそれを間違って使っていて、外側とジャンクからそれを初期化しようとしています。これは私が提案するパターンに対して非常に意図的なものです。そのパターンに従いたくない人にとっては、正反対のこともうまくいきます。最初に宣言を別の関数に渡します。多分それを "properties"か "publicproperties"か何かと名付けてください。それから残りのものを通常のコンストラクタに入れます。[厳密] [厳密]を使用してください[厳密] [] [] myclass [[]] properties(){[。] this.prop1 = 'blah 1' ; this.prop2 = 'blah 2'; this.prop3 = 'blah 3'; } constructor(){[ this.properties(); 何でも(); } } この2番目のメソッドはきれいに見えるかもしれませんが、このメソッドを使用しているクラスが別のクラスを拡張するとpropertiesがオーバーライドされるという固有の問題もあります。それを避けるためにはpropertiesにもっとユニークな名前をつける必要があります。私の最初の方法ではこの問題は発生しません。コンストラクタの偽の半分はクラス名に基づいて一意に命名されているからです。