JavaScriptにおけるクラス定義メモ

Publish:

Category:JavaScript

Tag:

  • Hatena Bookmark:
  • Twitter:

JavaScriptでオブジェクト指向プログラミングする時のメモ。

ページ内見出し一覧

JavaScriptでのクラス定義について

「JavaScriptでは、(Javaなどの言語に見られる)クラスという抽象化された概念は存在しない。存在するのはインスタンス化されたオブジェクトだけだ」となる。すなわち、JavaScriptでは、すべての”モノ”が実体(インスタンス)であり、クラスとインスタンスという概念が区別されない。

マイコミジャーナル 「そろそろきっちりJavaScript」

「JavaScriptにおけるクラスの定義」と本ページのタイトルを付けたものの、正確にはオブジェクトを関数オブジェクトで定義する事になる模様。

クラス(関数オブジェクト)の定義例

コンストラクタの記述例

var Person = function() {};

プロパティの追加例

関数内の変数定義の場合はthisを付けておく。

var Person = function(_name, _age) {
	this.name = _name;
	this.age = _age;
}

メソッドの追加例

下記2点の理由により基本的にコンストラクタの中に記述せず、プロトタイプ・オブジェクトを介した暗黙的な参照で定義した方がよい。

  • インスタント化する度に使用しないメソッド分もメモリを消費する
  • プロトタイプ・オブジェクトの変更はリアルタイムに認識する
//例:プロトタイプをオブジェクト・リテラルで定義
var Person = function(_name, _age) {
	this.name = _name;
	this.age = _age;
};
Person.prototype = {
	getName : function() {
		alert(this.name + "さん");
	}
};
var friend1 = new Person("鈴木", 16);
friend1.getName(); //「鈴木さん」

JavaScriptはインスタンス化した後にもメソッドを追加することができる。

//例:インスタンス化した後にメソッドを追加
var Person = function(_name, _age) {
	this.name = _name;
	this.age = _age;
};
var friend1 = new Person("鈴木", 16);
friend1.getName = function() {
	 alert(this.name + "さん");
};
friend1.getName(); //「鈴木さん」

継承(プロトタイプ・チェーン)例

var Person = function() {}
Person.prototype = {
	walk : function() {
		alert("徒歩");
	}
};

var Friend = function() {};
Friend.prototype = new Person();
Friend.prototype.jogging = function() {
  window.alert("走る");
};

var friendA = new Friend();
friendA.walk(); //「徒歩」
friendA.jogging(); //「走る」

Post Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Return to page top