Javascript prototype
prototypeとは?
クラスの概念なかったバージョンでその代わりとして使われたもの
prototypeプロパティと言われる
コンストラクタ関数につけることで、インスタンスした際に自動的に関数が入る
// コンストラクタ関数
const Fruit = function(name,price){
this.name = name ;
this.price = price ;
}
// プロトタイプ
Fruit.prototype.sayPrice = function( ){
console.log ( this.name + "の値段は" + this.price + "円です" ) ;
}
プロトタイプのメリット
メモリの削減ができる
コンストラクタ関数にメソッドとして追加することもできるが
インスタンス1つ1つにメソッドが入る
しかしプロトタイプは共有で使われるため、かかれない
// コンストラクタ関数
this.name = name;
this.price = price;
}
// プロトタイプ
console.log(this.name + "の値段は" + this.price + "円です");
}
var Banana = function(name,price){
this.name = name;
this.price = price;
this.sayPrice = function(){
console.log(this.name + "の値段は" + this.price + "円です");
}
}
const banana = new Banana('バナナ',120);
console.log(banana);
後から書き換えることができる
インスタンスした後にメソッドを変更したい場合
コンストラクタ関数に書くと
インスタンス1つ1つ変更しないといけなくなる
しかし、プロトタイプの場合
変更内容を同じように書き足すことで
全てのインスタンスのメソッドを書き換えることができる
const Fruit = function(name,price){
this.name = name;
this.price = price;
}
Fruit.prototype.sayPrice = function(){
console.log(this.name + "の値段は" + this.price + "円です");
}
const orage = new Fruit('オレンジ',100);
const grape = new Fruit('ぶどう',120);
console.log(orage.sayPrice()); // オレンジの値段は100円です
console.log(grape.sayPrice()); // ぶどうの値段は120円です
Fruit.prototype.sayPrice = function(){
console.log("今日のオススメは" + this.name + "で" + this.price + "円です");
}
console.log(orage.sayPrice()); // 今日のオススメはオレンジで100円です
console.log(grape.sayPrice()); // 今日のオススメはぶどうで120円です