JavaScriptでは全てのデータをオブジェクトで表現できる
通常はリテラル(スクリプト文中に直接データを書き込んだもの)で表現するデータを、JavaScriptではオブジェクトとしても表現できるようになっています。(厳密にはリテラルで書いたデータとオブジェクトで書いたデータは異なるものですが、その説明は省略)
リテラルで表現した場合と、オブジェクトとして表現した場合の比較
|
リテラルで表現した場合 |
オブジェクトとして表現した場合 |
数値 |
100 |
new Number(100) |
文字列 |
"fuga" |
new String("fuga") |
真偽値 |
true |
new Boolean(true) |
配列 |
["foo","bar"] |
new Array("foo","bar") |
正規表現 |
/fuga/ |
new RegExp("fuga") |
オブジェクト |
{} |
new Object() |
関数 |
function(foo) {alert(foo)} |
new Function("foo","alert(foo)") |
プロパティについて
オブジェクトはその内部にプロパティを持つことができます。オブジェクト名とプロパティ名をドットで繋げることプロパティを呼び出せます。
例えば Array オブジェクトは length というプロパティを持ち、オブジェクト名.length
とすることで、この配列オブジェクトの持つ要素の数を取り出すことができます。
var hoge = new Array("foo","bar");
alert(hoge.length) // 2 が表示される
length のようなものは Array オブジェクトに最初から組み込まれているプロパティなので、特に自分で定義しなくてもいきなり使うことができます。もちろん自分でプロパティを作ることもできます。
プロパティを作るには、作成したオブジェクトに .(ドット)を付けてプロパティを定義します。
var hoge = {};
hoge.x = 100;
alert(hoge.x); // 100 が表示される
もしくは、オブジェクトを作成する際にオブジェクトリテラル形式で定義します。
var fuga = {x: 100, y: 50}
alert(fuga.x + fuga.y); // 150 が表示される
コンストラクタとインスタンス
「オブジェクトで表現した」場合、new XXX()
という文になりますがこれはXXX()
というコンストラクタから新たなオブジェクトを作る、という意味となります。コンストラクタとは新たなオブジェクトを作る雛形のようなものであり、コンストラクタから作られたオブジェクトをインスタンスと呼びます。
JavaScriptでは関数をコンストラクタとして使うことができます。関数を定義する際、this.XXX
という書き方でプロパティを定義しておくと、そのプロパティはインスタンスにも引き継がれます。
// hoge()コンストラクタを作成
// hoge()のプロパティとして x=100 を定義
function hoge() {this.x = 100;}
// hoge()コンストラクタからfugaオブジェクトを作る
// fugaオブジェクトはhoge()コンストラクタのインスタンスとなる
var fuga = new hoge()
// hoge()コンストラクタから x=100 プロパティが
// 継承されているので 100 が表示される
alert(fuga.x)
今回はこの辺までで。
prototypeチェーンについてはまだ勉強中・・・。
Continue reading →