assaulter's diary

主にバイクについて

JavaScript The Good Partsを読む(その1)

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

この本を読み解きながら、JavaScriptについて勉強していきます。

第三章 オブジェクト

JavaScriptについてwikiを調べると、

プロトタイプベースとは、オブジェクト指向言語と総称されるプログラミング言語のうち、プロトタイプを基礎(ベース)としてオブジェクトを取り扱うものをいう。インスタンスベースとも。

という記述が出てきます。クラスを持つJavaなどのオブジェクト指向言語と対比するかのようなニュアンスを受けましたが、それらの言語と同じように考えるのは危険みたいです。

このプロトタイプという言葉が鍵みたいで、この章の後半にプロトタイプの記述が出てきますが、まずは基礎となるオブジェクトについて。

3.1 オブジェクトリテラル

オブジェクトリテラルを利用すると、簡単に新しいオブジェクトを生成できる。

// オブジェクトリテラルの例

var person = {
    // personオブジェクトは、2つのプロパティを持つ
    "first-name": "Reimu",
    "last-name": "Hakurei"
};

ver person2 = {
    // 予約語でなければ、クォートなくてもおk
    firstName: "Marisa",
    lastName: "Kirisame"
    // first-name: "Marisa"
    // ↑これはハイフンがマイナス演算子と解釈される?
};

ハイ。めんどくさいのでハイフン使わないほうが良い気がします。

3.2 値の取得

// 特殊な宣言をしている場合には[]を使って取得
person["first-name"] // Reimu
person.first-name // error!!

// こっちが一般的か。よく見るやつ。
person2.firstName // Marisa
person2.nickName // undefined

// undefinedに対して、プロパティを取得しようとすると例外が投げられる
person2.nickName.first

3.3 値の更新

JavaScriptのオブジェクトはミュータブル(可変)なので、値の更新及びプロパティの追加が可能である。

// ReimuがReimyになる
person["first-name"] = "Reimy";

// nick-nameとしてwakiが追加される
person["nick-name"] = "waki";

3.4 参照

オブジェクトは参照渡しが行われ、複製されることはない。らしい。

// オブジェクトの参照
// unknownはperson2オブジェクトを指す。(ポインタと考えていいのか・・・?)
var unknown = person2;
unknown.motto = '弾幕は火力';
// person2にmottoプロパティが追加された・・・!
    person2.motto // '弾幕は火力'

長くなってしまったので、プロパティの話は次回。では。