2020年04月14日

JavaScript オブジェクトの継承について

// プロトタイプオブジェクトの定義方法/オブジェクトの継承について
'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
posted by Hiro at 00:04| Comment(0) | プログラム
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: