#プログラミング勉強日記
2020年5月23日
#####オブジェクト関数
オブジェクトの値には関数を用いることもできる。プロパティの値として関数を記述する。その関数を呼び出すには「定数名.プロパティ値()」とする。
const user={
name:"田中",
greet:()=>{
console.log("Hello");
}
};
user.greet(); //コンソール:Hello
#####クラス
効率よくオブジェクトを作成するための方法として最初に用意するもの。「class クラス名」で新しくクラスを用意することができる。クラス名は基本的に大文字から始める。
#####インスタンスの生成
クラスからオブジェクトを生成するためには「new クラス名()」とする。クラスから生成したオブジェクトを特別にインスタンスという。あるクラスのインスタンスをクラス名インスタンスという。
#####コンストラクタ
クラスにある機能。インストラクタを生成するときに実行したい処理や設定を追加するための機能。
class Animal{
constructor(){
console.log("Hello");
}
}
const animal1=new Animal(); //コンソール結果:Hello
const animal2=new Animal(); //コンソール結果:Hello
コンストラクタの中で生成したインスタンスに関する情報を追加するために「this.プロパティ=値」とすることができる。
インスタンスはオブジェクトがあるので、コンストラクタの中で追加した値は「インスタンス.プロパティ」とすることでクラスの外で使える。
class Animal{
constructor(){
this.name="レオ";
}
}
const animal=new Animal();
console.log(animal.name); //コンソール結果:レオ
#####コンストラクタの引数
コンストラクタでも関数と同様に引数を受け取ることが可能である。コンストラクタに引数として値を渡す場合には、「new クラス名」の()内に値を引き渡す。
class Animal{
constructor(name,age){
this.name=name;
this.age=age;
}
}
const animal=new Animal("レオ",3);
この例では、レオという値が引数として渡されて、コンストラクタの中ではnameとして扱われている。
#####メゾット
インスタンスの動作のようなもの。メゾットはクラスの中で「メゾット名(){}」で定義する。メゾットは関数と似ていて、中括弧の中にそのメゾットで行いたい処理をする。
class Animal{
...
greet(){
console.log("Hello");
}
}
animal.greet(); //メゾットの呼び出し
↓メゾット内で値を使う場合↓
class Animal{
...
info(){
console.log(`名前は${this.name}です`); //インスタンスのnameプロパティの値になる
}
}
const animal=new Animal("レオ",3);
animal.info(); //コンソール結果:名前はレオです
↓同じクラスのメゾットを実行↓
class Animal{
greet(){
console.log("Hello");
}
info(){
this.greet();
...
#####クラスの継承
すでにあるクラスをもとに新しくクラスを作成する方法。継承を用いてクラスを作成するためにはextend
を用いる。継承では元となるクラスを親クラスといい、新しく作成するクラスを子クラスという。
class Animal{
info(){
this.greet();
console.log(`名前は${this.name}です`);
console.log(`${this.age}歳です`);
}
}
class Dog extends Animal{
}
const dog=new Dog("レオ",4);
dog.info(); //Animalクラスに定義されているメゾットを使用できる
#####メゾットの追加
継承して作成したクラスにもこれまでと同じようにメゾットを追加することができる。子クラスで定義した独自のメゾットは親クラスから飛び出すことはできない。
class Dog extends Animal{
getHumanAge(){
return this.age*7; //関数と同じようにメゾットでも戻り値が使える
}
}
const dog=new Dog("レオ",4);
const humanAge=dog.getHumanAge();
#####オーバーライド
親クラスと同じ名前のメゾットを子クラスに定義すると、子クラスのメゾットが親クラスのメゾットを上書きすること。メゾットと同じようにコンストラクタでもオーバーライドできるが、その場合1行目に「super()」とかく。