はじめてのprototype.jsの前に知っておくべきことがあった

それはjavascriptのprototypeについて。

クラスベースとプロトタイプベース

javac++は、クラス-インスタンスという概念を使用するオブジェクト指向言語で、クラスベースオブジェクト指向言語
javascriptは、オブジェクトは別なオブジェクトを元(プロトタイプ)にして独自の特徴を付加することで存在する、という考え方のオブジェクト指向言語で、プロトタイプベースオブジェクト指向言語

javascriptにおけるオブジェクトの生成

function constructor() {}

var obj = new constructor();

まず、関数を定義して次にnew演算子で関数オブジェクトをobjに代入している。

prototypeオブジェクト

全ての関数オブジェクトはprototypeというプロパティを保持している。

function Constructor() {}
Constructor.prototype.a = 30;

var objA = new Constructor();
var objB = new Constructor();

alert(objA.a)     // 30 と表示される。(aというフィールドがないのでprototypeのaを評価)
alert(objB.a)     // 30 と表示される。(aというフィールドがないのでprototypeのaを評価)

objA.a = 100;     // objAにaというフィールドを追加し100で初期化

alert(objA.a)     // 100 と表示される。
alert(objB.a)     // aというフィールドがないのでprototypeのaを評価

メモ

function a(x) { alert(x) }
a(3)
var a = function(x) { alert(x) }

上の二つの実行結果は同じ。
自分が良く使ってたのは上のほう。下のほうは関数リテラルと呼ばれるもので、aに無名関数が代入されるというらしい。

var a = function(x) { return x }(3)

ちなみにコレだと、function(3)の実行結果がaに代入されるのでa == 3となる。

下記参考リンク
javascriptを理解するためのたった2つの大切なこと:改