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プロパティは自動的に作成されるのだが。