// プロトタイプオブジェクトの定義方法/オブジェクトの継承について
'use strict';
var Person = function(name, birthday, address){
this.name = name;
this.birthday = birthday;
this.address = address;
}
// オブジェクトリテラルでプロトタイプオブジェクトを定義する。
Person.prototype = {
getName : function(){
return `名前は${this.name}です。`;
},
getAddress : function(){
return `居住地は${this.address}です。`;
}
}
// 静的プロパティ
Person.Company = 'ABC Corp.';
// 静的メソッド
Person.Greeting = function(){
return 'こんにちは!';
}
// インスタンス生成
var p1 = new Person('太郎','2005/08/20','東京都');
var p2 = new Person('花子','2008/10/05','大阪府');
console.log(p1.getName());
console.log(p2.getAddress());
// p2インスタンスのみメソッド追加
p2.getBirthday = function(){
return `誕生日は${this.birthday}です。`;
}
// console.log(p1.getBirthday()); // エラー
console.log(p2.getBirthday());
// プロトタイプチェーンによるオブジェクトの継承
var BaseballPlayer = function(name, birthday, address, team, career){
Person.call(this, name, birthday, address); // this(BaseballPlayerのインスタンス)を使ってPersonコンストラクタを呼び出す
this.team = team;
this.career = career;
}
BaseballPlayer.prototype = new Person(); // Personのインスタンスをセットする
BaseballPlayer.prototype.getTeam = function(){
return `チーム名は${this.team}です。`;
};
var bp1 = new BaseballPlayer('鈴木三郎','1980/01/30','兵庫県','ナンチャラズ',5);
console.log(bp1.getAddress()); // Personのメソッド
console.log(bp1.getTeam()); // BaseballPlayerのメソッド
// ダミーのオブジェクト
var Dummy = function(){};
// prototypeを上書き
BaseballPlayer.prototype = new Dummy();
console.log(bp1.getTeam()); // インスタンスには影響なし(インスタンス生成時のプロトタイプチェーンを保持する)。
タグ:JavaScript