JavaScriptのthisキーワード

javaから入った自分にとって、thisキーワードと言えばインスタンスを指すものだ。
まあ、言語によって何を指すかは変わってくるだろうが、javascriptでもthisがあると分かった。
しかもjavascriptでは実行時によってthisのさすものが異なるという非常にやっかいなものだ。
なので私は混乱した場合、この関数(メソッド)を実行しているのは何のオブジェクトかという風に考える。
例えば、

var a = "global val a";
var ob = {
	"a":"local val a"
};
ob.func1 = function() {
	alert(this.a);
}
ob.func2 = function() {
	return function() {
	       alert(this.a);
	       }
}
ob.func1();
ob.func2()();

このとき
ob.func1()の場合、thisキーワードはobオブジェクトを指すため、結果として"local val a"を返す。
ob.func2()()の場合、のthisキーワードはグローバルオブジェクトを指すため、結果として"global val a"を返す。
例えが悪いかもしれないが、このようにthisでも使うところによって指している対象物が異なってくるから
ソースをきちんと読む必要がある。



ちなみにjavascriptでは関数=オブジェクトであり、オブジェクト内で関数が定義されるとメソッドという名に変わる。
関数もオブジェクトであるため、関数にプロパティを作成することも出来るし、関数にメソッドを作成するという事も出来る。
まあ、関数が出来たらprototypeプロパティは自動的に作成されるのだが。