JavaScript 目次 - ray88’s diary
・生成したインスタンスについてはメンバー変更可能。
すなわちメソッド変更も可能。
・生成したインスタンスへのメソッドへ項は、インスタンスの
メソッドを直接的に変更するもので クラスのprototypeプロパティに
変更を与えるものではない。
・インスタンスとクラスのprototypeプロパティには同名のメソッドが
それぞれ存在可能で バッティングした場合はインスタンスの
メソッドが優先して呼び出される。
【サンプルコード】
※インスタンスpに対するgreetメソッドを上書きしても、
Personクラスのprototypeプロパティ内のgreetメソッドは変更を受けていない
function myFunction(){ //クラス「Person」を定義 class Person{ constructor(name,age){ //thisキーワードを用いてnameプロパティ、ageプロパティを定義 this.name = name; this.age = age; } //greetメソッドの定義 greet(){ console.log(`Hello! I am ${this.name}!`); } //isAdultメソッドの定義 isAdult(){ return this.age >= 18; } } //クラス「Person」のインスタンスを生成し、定数pに代入 const p = new Person('Bob',25); //関数リテラルを代入し、インスタンスpのgreetメソッドを上書き p.greet = function(){ console.log(`Good Bye I'm ${this.name}!`); } //greetメソッドを呼び出し p.greet(); //Personクラスのprototypeプロパティ内のgreetメソッドの内容を出力 console.log(Person.prototype.greet.toString()); //インスタンスpのgreetメソッドの内容を出力 console.log(p.greet.toString()); }