[解決済み] typescript で基底クラスのコンストラクタでオーバーライドされたメソッドを呼び出す
2023-04-13 21:46:41
質問
ベースクラスのコンストラクタからオーバーライドされたメソッドを呼び出す際に、サブクラスのプロパティの値を正しく取得できません。
例を挙げます。
class A
{
constructor()
{
this.MyvirtualMethod();
}
protected MyvirtualMethod(): void
{
}
}
class B extends A
{
private testString: string = "Test String";
public MyvirtualMethod(): void
{
alert(this.testString); // This becomes undefined
}
}
typescriptで正しく関数をオーバーライドする方法を知りたいです。
どのように解決するのですか?
実行の順番は
-
A
のコンストラクタ -
B
のコンストラクタです。
代入は
B
のコンストラクタの
A
のコンストラクタ
_super
-が呼び出されました。
function B() {
_super.apply(this, arguments); // MyvirtualMethod called in here
this.testString = "Test String"; // testString assigned here
}
ということで、以下のようになります。
var b = new B(); // undefined
b.MyvirtualMethod(); // "Test String"
これに対応するために、コードを変更する必要があります。例えば
this.MyvirtualMethod()
の中で
B
のコンストラクタに渡すか、ファクトリーメソッドを作成してオブジェクトを作成し、関数を実行するか、または文字列を
A
のコンストラクタに文字列を渡し、それを何らかの方法で処理する......いろいろな可能性があります。
関連
-
[解決済み] インターフェースとベースクラス
-
[解決済み] Pythonで子クラスから親クラスのメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] 派生クラス関数から親クラス関数を呼び出すには?
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み] コヒーシ ョンとカップリングの違い
-
[解決済み】依存関係逆転の原則とは何ですか、なぜそれが重要なのですか?
-
[解決済み] 実装ではなくインターフェースにプログラムする」とはどういう意味ですか?
-
[解決済み] オブジェクト指向分析・設計によるエレベータのモデル化 [終了しました]
-
[解決済み] ベストプラクティス:クラス定義内でのpublic/protected/privateの順序?
-
[解決済み] Scalaでコンパニオン・オブジェクトを持つ根拠は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み] 抽象クラスの代わりにインターフェイスを使用する場合とその逆は?
-
[解決済み] ミュータブルとイミュータブルのオブジェクト
-
[解決済み] コンストラクタをprivateにするとどうなるのですか?
-
[解決済み] Amazonインタビューの質問です。OO駐車場の設計【終了しました
-
[解決済み] Mediator Vs Observer オブジェクト指向デザインパターン
-
[解決済み] protected なメンバ変数を使うべきですか?
-
[解決済み] よりよいオブジェクト指向プログラミングを実践するには?[終了しました]