JSのクラスについて
JSのクラスについての質問の続きとなります。
>>>
class Cat {
constructor(name) {this.name = name}
meow() {alert( this.name + 'はミャオと鳴きました' )}
}
//インスタンス作成
var clsObj = new Cat("my cat");
//インスタンス(オブジェクト)の中身を出力
console.log(clsObj);
初心者なのでこの中のどの記述が必須で、
またnameはどれと対になっているかがわかりません。
インスタンスはnew クラス名 となっている所で作成されて変数に作られたインスタンスが代入されるというのは何となく分かったのですが、
console.log(clsObj);
VM793:9
Cat {name: "my cat"}
となるのがいまいちわかりません。
new Cat("my cat");
は
class Cat {
constructor(name) {this.name = name}
meow() {alert( this.name + 'はミャオと鳴きました' )}
}
を実行するという事で、
引数は
constructor(name)
new Cat("my cat");
が対になっているのでnameがmycatに代わるという事でしょうか?
new Cat("my cat");
が実行された結果がインスタンスという事ですが、
mycatがインスタンスなのですか?
大変恐縮ですが、簡単に一連の流れを教えていただければ幸いです。
class Cat {
constructor(name) {this.name = name}
meow() {alert( this.name + 'はミャオと鳴きました' )}
}
にどう渡されてどのように処理され何がインスタンスとして吐き出されるのでしょうか?
ES6でclassとは?
の続き
_____________
何度もご対応大変ありがとうございます。
>>>
ClassがInstanceを作るための設計図だということは理解していただいているかと思います。
クッキーの抜き型には、丸や四角、星型などいろいろな形があります。一度クッキーの抜け型を作っておけば、同じ形のクッキーを幾つでも作ることが出来ます。クッキーは実際に食べることが出来ますが、クッキーの型は食べることが出来ません。
という例えを見たのですが、
どうも型とは関数のように何度も再利用するための式などのまとまりの事で、関数とそっくりなもののようですね。
つまり関数の定義とほぼ同じだが、すべてがグローバルになるので、外からでも利用ができる関数の定義がクラスの作成という事になるのですかね?
そしてインスタンス化とはクラスは作成定義しただけでは使えないので、関数の呼び出しのようにクラスのインスタンス化をnewで行い実際にクラスを使えるようにする、呼び出しできるようにする
という事ですかね?
class Cat {
constructor(name) {this.name = name}
meow() {alert( this.name + 'はミャオと鳴きました' )}
}
から
clsObj = {
constructor:function(name) {this.name = name},
meow:function() {alert( this.name + 'はミャオと鳴きました' )}
};
が作成されるという事ですか?
>>>
上記のような感じですと実行されるときのthisがInstance(Object)を指すイメージが付きますでしょうか?
thisはクラス名ではなくコンストラクタを実行した結果具現化されるインスタンスを示すようですが、
具体的にソースのどれでしょうか?
>>>
そして、このInstanceを作成した際にはコンストラクタが実行されるので下記のように変化します。
constructor:function(name) {this.name = name},
を実行した結果
clsObj = {
name:"my cat",
constructor:function(name) {this.name = name},
meow:function() {alert( this.name + 'はミャオと鳴きました' )}
};
となるという事なのは分かったのですが、
変更されたのは、name:"my cat",だけのようですね。
constructor:function(name) {this.name = name}は結局
nameが引数の無名関数を定義して、内容はインスタンスの中のnameプロパティにnameを代入しているのでしょうか?
また、name引数はvar name = というローカル変数に何を代入した状態になるのでしょうか?
実引数があればそれが入るとわかるのですが、これは見当たりません
またなせ代入作業がされただけで
name:"my cat",
というプロパティが生成されるのでしょうか?