はじめてのprototype.jsの前に知っておくべきことがあった
それはjavascriptのprototypeについて。
クラスベースとプロトタイプベース
javaやc++は、クラス-インスタンスという概念を使用するオブジェクト指向言語で、クラスベースオブジェクト指向言語。
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つの大切なこと:改