スコープの順番

javacriptのスコープの順番は厄介だ。。。
例えば、あるオブジェクトに以下のようなコンストラクタ関数が定義されている。

function hoge(hogehoge) {
        this.hoge = hogehoge ;
        this.say = function() { alert(this.hoge) ; }
}

で、以下のようにprototype宣言でプロパティを追加する。

hoge.prototype.say = function() { alert('this is prototype property'); }

上のような定義をし、

var hogeobj = new hoge('local hoge!') ;
hogeobj.say() ;

実行すると・・・

local hoge!

と表示される。

つまり、オブジェクトが生成され、そのプロパティにアクセスすると、javascriptでは、まず、オブジェクトのプロパティにその値があるかを見て、その後プロトタイプオブジェクトに指定したプロパティ値があるかを見るらしい。

う〜ん。。。なんか定義の順番的には、プロトタイプで指定したプロパティ値が呼ばれるって思っちゃうんだよな。。。ややこしや。。。