特集PC技術

コアJavaScript(ECMAScript)の図書室

 

34冊目 【JavaScript】[ECMAScript] プロパティ

クラスにはデータという値を設定することができます。
ここではプロパティに関しての説明を行います。

目次

[1] プロパティ

プロパティはクラスが持つデータのことです。
Javaでいうとメンバ変数に該当します。
JavaScriptは柔軟な言語なためプロパティの設定方法がいろいろあります。

[2] プロパティを使ってみよう

クラスの構成の1つであるプロパティを設定してみます。
ここでは一般的に使用される方法をまず解説をします。
プロパティはコンストラクタ内にthisキーワードを使用して定義します。

// 人間クラスを定義
function Human(name){
	// 名前プロパティ
	this.name = name;
}

// インスタンスを生成
var hopsii = new Human("ほぷしぃ");
document.writeln(hopsii.name);

// オブジェクトを生成
var pcsp = { name:"PC特集技術" };
document.writeln(pcsp.name);

Humanコンストラクタに引数として渡し、プロパティを初期化します。
さて、インスタンスプロパティにアクセスですが、オブジェクトに格納されているデータと同じです。
コンストラクタにthisキーワードを使用して定義するプロパティは全てのクラスで持ちたいデータを定義しましょう。

[3] クラスプロパティ(静的プロパティ)

クラスプロパティは、クラス自体が持つプロパティです。

// 人間クラスを定義
function Human(name){
	// 名前プロパティ
	this.name = name;
}

// クラスプロパティを設定
Human.age = 20;

// インスタンスを生成
var hopsii = new Human("ほぷしぃ");
document.writeln(hopsii.name);	// ほぷしぃ
document.writeln(hopsii.age);	// undefined
document.writeln(Human.age);	// 20

クラスプロパティはあくまでクラスが持つのでインスタンスプロパティには反映されませんので注意しましょう

[4] プロトタイププロパティ

ここがプロパティにおけるとても重要な概念の1つになります。

// 人間クラスを定義
function Human(name){
	// 名前プロパティ
	this.name = name;
}

// プロトタイププロパティを設定
Human.prototype.age = 20;

// インスタンスを生成
var hopsii = new Human("ほぷしぃ");
document.writeln(hopsii.name);	// ほぷしぃ
document.writeln(hopsii.age);	// 20

var pcsp = new Human("PC特集技術");
document.writeln(pcsp.name);	// PC特集技術
document.writeln(pcsp.age);		// 20

プロトタイププロパティを使うと全てのインスタンスは反映されるがわかります。
クラスにおいて定数を使いたい場合にはこのプロトタイププロパティを使うといいでしょう。
プロトタイプはJavaScriptにおいて重要な働きを持つ機能なので別の機会で詳しく説明します。

[5] プロパティの使用時の注意点

JavaScriptにおいてプロパティが1点だけ気をつけるべきことがありますので説明をします。
それはインスタンス生成後にプロパティが追加できる機能です。
こういう機能が一般的なクラスと違ういわれている理由かもしれません。
プロトタイプの例を先ほど説明しましたが、もし使わなかったときどうなるのか見てみます。

// 人間クラスを定義
function Human(name){
	// 名前プロパティ
	this.name = name;
}

// インスタンスを生成
var hopsii = new Human("ほぷしぃ");

// インスタンス生成後にプロパティを追加する
hopsii.age = 20;
document.writeln(hopsii.name);
document.writeln(hopsii.age);

// インスタンスを生成
var pcsp = new Human("PC特集技術");
document.writeln(pcsp.name);

// このインスタンス用にプロパティを追加しないといけない
document.writeln(pcsp.age);
pcsp.age = 30;
document.writeln(pcsp.age);

ただし、この方法をとるとインスタンスごとにプロパティを設定しなくてはなりません。
プロトタイプとの明らかな違いがわかると思います。

[6] 更新履歴

日付 詳細
2011/09/06 コンテンツ公開

コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1709

サイト内検索

コアJavaScript(ECMAScript)の図書室

twitterTwitter

最新ブログ記事

2015年06月13日

JavaScriptの情報室

4冊目 ハイブリッドアプリが作れる。tabris.js

2014年10月16日

C++言語学習録

第3回 ファイルを分割してみよう

2014年10月09日

C++言語学習録

第2回 オブジェクト指向の復習

2014年10月02日

C++言語学習録

第1回 C++の開発環境を整える

2014年09月25日

Swiftを試してみようなう。

第4回 Swiftでクラスを使うなう。

ISL 情報戦略研究所

pagetopこのページの先頭へ戻る