16
11

More than 3 years have passed since last update.

JavaScript(メソッド/オーバーライド)

Posted at

メソッド

インスタンスの動作(のようなもの)を「メソッド」と呼ぶ。

「名前」や「年齢」などの情報はプロパティで追加したのに対して、
メソッドは「挨拶をする」「値を計算する」などの処理のまとまりを表す。

メソッドはクラスの中で定義する。
書き方:メソッド名() { }

メソッドは関数と似たようなもので、中括弧「{ }」の中にそのメソッドで行いたい処理を記述する。


//例
class クラス名 {
    constructor(){
        ・・・・・・・
    }
    メソッド名(){
    行いたい処理
    }
}

メソッドは、そのクラスから生成したインスタンスに対して呼び出す。
具体的には、以下の図のように「インスタンス.メソッド名()」とすることでそのメソッドを呼び出し、処理を実行することができる。


//例
class Animal{
    constructor(name,age){
        ・・・・・・・
    }
    greet(){
        console.log(こんにちは!”)
    }
}

const animal = new Animal(バルー,3);
animal.greet();

this

メソッド内でインスタンスの値を使用するには、「this」という特殊な値を用いる。

書き方:this.プロパティ名

//例
class Animal {
    constructor(name,age){
        ・・・・・・・
    }
    info() {
        console.log(`名前は${this.name}です。`);
    }                          //↑インスタンスのnameプロパティの値になる
}
const animal = new Animal(バルー,3);
animal.info();

//コンソール
名前はバルーです

メソッド内でメソッドを使う

メソッド内に同じクラスの他のメソッドを使うことができる。
書き方:this.メソッド名()

image.png

継承

すでにあるクラスをもとに、新しくクラスを作成する方法のことを「継承」と呼ぶ。
例えば、「Animalクラス」から「Dogクラス」を継承すると、「Animalクラス」の全ての機能を引き継いで、「Dogクラス」を作成することができる。

継承を用いてクラスを作成するにはextendsを用いる。

//例
class Dog extends Animal {
}

「Dogクラス」は「Animalクラス」のすべての機能を引き継いでいる。
そのため、「Dogクラス」内にはまだ何もメソッドは定義されていないが、「Animalクラス」に定義されている「infoメソッド」などを使用することができる。

//例
class Animal {
    info(){
        this.greed();
        console.log(`私は${this.name}です`);
        console.log(`${this.age}歳です`);
    }
}
class Dog extends Animal {
}

const dog = new Dog(バルー,3);
dog.info();
    //↑Animalクラスに定義されているメソッドを使用できる

メソッドの追加

継承して作成したクラスにも、新しくメソッドを追加することができる。(←独自のメソッド)

メソッドでは、関数と同じように戻り値を用いることができる。

image.png

子クラスで定義した独自のメソッドは親クラスから呼び出すことはできない。

class Dog extends Animal {
    getHumanAge(){
        return this.age*7;
    }
}
const dog = new Dog(バルー,3);
const humanAge = animal.getHumanAge();
                    //↑getHumanAgeメソッドはDogクラスにしかないのでエラーになる

オーバーライド

同名のメソッド

親クラスと同じ名前のメソッドを子クラスに定義すると、子クラスのメソッドが優先して使用される。
これは、子クラスのメソッドが親クラスのメソッドを上書きしていることから、「オーバーライド」と呼ばれる。

const dog = new Dog(バルー,3);
dog.info();

class Animal {
    info(){
        
        
    }
}
class Dog extends Animal {
    info(){
        
        
    }
}

コンストラクタのオーバーライド

メソッドと同じように、コンストラクタもオーバーライドすることができる。
例えば、子クラスにプロパティを追加したい場合などに用いる。

コンストラクタをオーバーライドする際は1行目にsuper()と記述する。

子クラスのコンストラクタ内super()では、その部分で親クラスのコンストラクタを呼び出している。
親クラスのコンストラクタが引数を受け取る場合には、「super」の後ろの丸括弧「( )」に引数を渡す。

image.png

16
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11