キコーナ 久代k8 カジノクラスの型にまつわるあれこれ(3)~クラスにおける特殊なthisと抽象クラスとstatic~仮想通貨カジノパチンコリング 7 日間
bitbank ビット コインk8 カジノ
パチンコ 朝一 100 回転連載:TypeScriptのTypeあれこれシリーズ
クラス内での特殊なthisの使い方
前回、前々回で紹介したクラス構文内でのthisの使い方は、同じクラス内や親クラス内のフィールドやメソッドを利用する場合の「this.」という記述でした。今回は、このthisのクラス内での特殊な使い方から話を始めていきます。
thisの特殊な使い方まとめ
クラス内でのthisの特殊な使い方は、以下の3種です。
メソッドの引数としてのthis戻り値としてのthisメソッドの引数の型としてのthis
それぞれ順に見ていきます。
JavaScriptのthisの弊害
最初に紹介するのが、メソッドの引数としてのthisです。ただし、この使い方を紹介する前に、なぜこのような使い方が必要なのか、その原因となるJavaScriptのthisの弊害について簡単に紹介します。JavaScriptのthisは使われる文脈に応じて、その内容がさまざまに変化してしまいます。TypeScriptでも、この性質は引き継がれざるを得ません。
例えば、リスト1のNameHolderクラスがあるとします。
class NameHolder {private name: string = "名無し"; // (1)constructor(name: string) {this.name = name;}showMyName(): void {console.log(`お名前: ${this.name}`); // (2)}showYourName(yourName: string): void {console.log(`私の名前は${this.name}で、あなたのお名前は${yourName}`); // (3)}}const nameHolder = new NameHolder("田中太郎"); // (4)nameHolder.showMyName(); // (5)nameHolder.showYourName("鈴木二郎"); // (6)リスト1
このコードの実行結果は、リスト2の通りです。
お名前: 田中太郎私の名前は田中太郎で、あなたのお名前は鈴木二郎リスト2
リスト1の(4)でNameHolderをnewする際に、「田中太郎」を引数で渡しており、これが、(1)のフィールドnameに格納されます。(2)も(3)もこのフィールドnameを表示させています。その際のコードであるthis.nameのthisはNameHolderオブジェクト自身を指し、従って「.name」のnameは(1)のフィールドを指しています。実行結果も、この通りの処理となり問題なく「田中太郎」と表示されています(図1)。
図1 メソッド内のthisはフィールドを指す
ところが、このNameHolderをnewしたnameHolderを利用して、リスト3のコードを記述したとします。
const func1 = nameHolder.showMyName; // (1)func1(); // (2)const func2 = nameHolder.showYourName; // (3)func2("鈴木二郎"); // (4)リスト3
このコードの実行結果は、リスト4の通りです。
お名前: undefined私の名前はundefinedで、あなたのお名前は鈴木二郎リスト4
なぜ、undefinedとなるのでしょうか。この種明かしは図2の通りです。
#CmsMembersControl .CmsMembersControlIn {width:100%;background:url(https://image.itmedia.co.jp/images/spacer.gif) #DDD;opacity:0.05;filter:progid:DXImageTransform.Microsoft.Alpha(Enabled=1,Style=0,Opacity=5);z-index:1;}続きを閲覧するには、ブラウザの JavaScript の設定を有効にする必要があります。仮想通貨カジノパチンコマルハン 経営 状況