[解決済み] ベースクラスのメンバへのアクセス
質問
TypeScriptサイトのプレイグラウンドにある継承の例を見てください。
class Animal {
public name;
constructor(name) {
this.name = name;
}
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}
class Snake extends Animal {
constructor(name) {
super(name);
}
move() {
alert("Slithering...");
super.move(5);
}
}
class Horse extends Animal {
constructor(name) {
super(name);
}
move() {
alert(super.name + " is Galloping...");
super.move(45);
}
}
var sam = new Snake("Sammy the Python");
var tom: Animal = new Horse("Tommy the Palomino");
sam.move();
tom.move(34);
私は一行だけコードを変更しました。
Horse.move()
. そこで、私は
super.name
にアクセスしたいのですが、それは単に
undefined
. IntelliSenseは使えることを示唆しているし、TypeScriptも問題なくコンパイルできるのですが、うまくいきません。
何かいい案はありませんか?
どのように解決するのですか?
動作例です。以下、注意事項。
class Animal {
constructor(public name) {
}
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}
class Snake extends Animal {
move() {
alert(this.name + " is Slithering...");
super.move(5);
}
}
class Horse extends Animal {
move() {
alert(this.name + " is Galloping...");
super.move(45);
}
}
var sam = new Snake("Sammy the Python");
var tom: Animal = new Horse("Tommy the Palomino");
sam.move();
tom.move(34);
-
パブリック変数に手動で名前を代入する必要はありません。使用方法
public name
を使用することで、これを行うことができます。 -
を呼び出す必要はありません。
super(name)
を特殊化クラスから呼び出す必要はありません。 -
使用方法
this.name
が動作します。
の使用に関する注意点
super
.
これは、より詳細には セクション 4.9.2 をご覧ください。
を継承するクラスの振る舞いは
Animal
は他の言語での挙動と似ていません。指定する必要があるのは
super
キーワードを指定する必要があります。 これは、特殊化された関数と基底クラスの関数との間の混乱を避けるためです。例えば、もしあなたが
move()
または
this.move()
を扱うのであれば、特殊な
Snake
または
Horse
関数を使用するため
super.move()
を使うと明示的に基底クラスの関数を呼び出すことになります。
プロパティはインスタンスのプロパティであるため、混同することはありません。という違いはありません。
super.name
と
this.name
- があるのは、単に
this.name
. そうしないと、特化クラスか基底クラスかによって異なる名前を持つHorseを作成することができます。
関連
-
[解決済み】Typescriptで、! (エクスクラメーションマーク/バン)演算子でメンバを再参照するのは?
-
[解決済み] 重複した識別子」という紛らわしいTypescriptエラーメッセージが発生する。
-
[解決済み] TSLintの "文字列リテラルによるオブジェクトアクセス "を回避するためのコードの書き換え方法
-
[解決済み] TypeScriptのハッシュマップ/辞書インターフェイス
-
[解決済み] Typescriptでオブジェクトのプロパティを結合する方法は?
-
[解決済み] TypeScriptの非同期関数でプロミスを返す
-
[解決済み] クラス定数を実装するには?
-
[解決済み] JSONオブジェクトをTypeScriptのクラスにキャストする方法を教えてください。
-
[解決済み] TypeScriptのクラス型チェック
-
[解決済み】ランタイムにオブジェクトのクラス名を取得する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] タイプスクリプトのエラーです。TS7053 要素が暗黙のうちに 'any' 型を持っています。
-
[解決済み] as "というキーワードは何を意味するのでしょうか?
-
[解決済み] TypeScriptでfetchを使う方法
-
[解決済み] Typescript ReferenceError: exports が定義されていません。
-
[解決済み] サービスにDocumentを挿入する方法は?
-
[解決済み] TypeScriptのsetTimeoutはどのような戻り値型を使用すればよいですか?
-
[解決済み] TypeScriptでグローバル変数を作成する
-
[解決済み] タイプスクリプト TS7006 です。パラメータ 'xxx' は暗黙のうちに 'any' 型を持ちます。
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] Typescript オブジェクトのインデックス付きメンバの型を強制する?