js コンストラクタ、インスタンス、プロトタイプ継承

コンストラクタ関数の定義

/* 変数 Person に無名関数を代入。
慣習的に頭文字(P)は大文字 */
var Person = function(name) {
	this.name = name;
	this.sayHello = function() {
		console.log('Hello, ' + this.name + '!');
	}
};

インスタンス(オブジェクト)の生成、プロパティの出力

var Person = function(name) {
	this.name = name;
	this.sayHello = function() {
		console.log('Hello, ' + this.name + '!');
	}
};
// インスタンスの生成
var Tom = new Person('Tom');

// プロパティの出力
console.log(Tom.name);
Tom.sayHello();

実行結果

Tom
Hello, Tom!

プロトタイプ継承

var Person = function(name) {
	this.name = name;
	this.sayHello = function() {
		console.log('Hello, ' + this.name + '!');
	}
};

// 「住所」という機能を持つコンストラクタ関数を定義
var Address = function(name, address) {
	this.name = name;
	this.address = address;
}

// Address インスタンス生成
var address = new Address('Tom', 'Tokyo');
console.log(address.name);
console.log(address.address);

// Address コンストラクタに Person コンストラクタの機能を継承
Address.prototype = new Person();

var allInfo = new Address('Tom', 'Tokyo');
allInfo.sayHello();

実行結果

Tom
Tokyo
Hello, Tom!

プロトタイプにメソッドを追加

var Person = function(name) {
	this.name = name;
	this.sayHello = function() {
		console.log('Hello, ' + this.name + '!');
	}
};

// 「住所」という機能を持つコンストラクタ関数を定義
var Address = function(name, address) {
	this.name = name;
	this.address = address;
}

// Address コンストラクタに Person コンストラクタの機能を継承
Address.prototype = new Person();

var telInfo = new Address('Tom', 'Tokyo');

// Person コンストラクタに メソッド追加
Person.prototype.tel = function() {
	console.log('Telephone');
}

telInfo.tel();

実行結果

Telephone