Javascript (OOP) で継承チェーンの基本クラスを直接実行するにはどうすればよいですか?
P粉718165540
P粉718165540 2024-01-10 17:20:07
0
1
394

私は 3 つの拡張可能なクラスの継承チェーンに取り組んでいます。

レンダラー (ベース) -> メールボックス (子) -> MailboxInbox (最後の子)

それぞれに独自の render メソッドがあります。子は Renderer (Base) render メソッドをオーバーライドするだけで、最終的には Renderer(Base) クラスの render< /strong> メソッドを使用する必要があります。 。私の問題は、Renderer クラス (createElementWithTextInside) の特定のメソッドを実行すると、Renderer の render メソッド (Renderer . render()) が完全には実行されないことです。 )、ただし、拡張可能なクラス チェーンの最後から始まります。たとえば、

のようにトラバースを開始します。 1 - MailboxInbox.render

2 - Mailbox.render

3 - Renderer.render

js クラス/継承が舞台裏でどのように機能するかを理解しています。 JavaScript はオブジェクトのプロトタイプを拡張するだけで、スクリプトはそれらを反復処理します。しかし、私の質問は、この動作を回避し、必要に応じてメソッド内で Renderer.render メソッドを直接呼び出すにはどうすればよいでしょうか?

renderer__self を保存することはできません。いずれにしても、現在のインスタンス (MailboxInbox) の this を指すことになるからです。また、コンテキスト を保存する必要があるため、.bind/lambda (アロー関数)

は使用できません。 ###バイオリン### リーリー

ここではコンソールにレンダリングするだけです:

1: 受信トレイのレンダリング

2: メールボックスのレンダリング

3: レンダラーのレンダリング

###ご協力いただきありがとうございます! 敬具!

更新

基本的に、パラメータを受け入れることができる基本的な render

クラスが必要です:

(el,content) (コンテンツはオプション) および Childreni それをオーバーライドしたいと考えていました事前定義された elcontent などを独自の .render() メソッドに含めますが、renderer を実行しようとすると .render() メソッドは Renderer 内から来ており、チェーン全体を通過しますが、MailboxInbox ではレンダリング メソッドが現在パラメータを受け入れないため、パラメータが欠落しています。パラメータを受け入れてチェーン全体に渡すか、RendererbaseRender のような専用のクラスを定義して直接呼び出します

P粉718165540
P粉718165540

全員に返信(1)
P粉618358260

技術的には、this.render(el, text);

に置き換えることができます。 リーリー

継承されたプロパティの検索をバイパスします。ただし、これは一般に良い習慣ではなく、class 継承の利点が失われます。

幸いなことに、アップデートで実際の問題が特定されました:

これは、互換性のないシグネチャを持つメソッドを誤ってオーバーライドし、 Liskov 置換原則 に違反します。

潜在的な解決策も特定しました:

どちらも良いです。後者の場合、メソッドに render および baseRender という名前を付けるのではなく、代わりに renderContent(el, content)renderDefault (el) のような名前を付けることをお勧めします。 ) 、それらの署名は実際には異なります。両方ともオーバーライドできます。ただし、2 つのパラメーターを指定して呼び出された render の実装を見ると、実際には el.appendChild(content) を呼び出すこと以外に役立つことは何もしていないように思えます。したがって、私はそれを完全に放棄して、単に appendChild を呼び出したいと思います (代わりに el.prepend(content) を実行するなど、特定の動作をオーバーライドする機能が必要な場合を除きます)。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート