JavaScriptの「this」を制覇せよ
JavaScriptでクラス(風)な実装をしていると、クラス変数の扱いに戸惑うことがあります。
クラス変数を参照するときには、
this.クラス変数名
とするとおもいます。
突然ですが、ここで問題です。
この「this」っていったいどのオブジェクトを参照しているのでしょうか?
正解は、
「どの場所から参照するかによって変わる」
です。
たとえば、クラスのなかで、別のライブラリの関数にコールバック関数を渡している場合を考えます。
コールバック関数の外では、「this」はクラスオブジェクトを指しています。
コールバック関数の中では、コールバック関数を渡したオブジェクトが「this」となります。
callBack( func);
とした場合、”func”関数内部にある「this」は”callBack”関数を指すことになります。
Javaになれてしまった人間には、thisの参照しているものが変わるということが非常に気持ち悪く感じられます。注意が必要ですね。
実際、かなりはまりましたし、いまもはまってます(><)。
JavaScriptでコーディングを行うときは、スコープをつよく意識して、ここの「this」は、なんなんじゃということを常に考えながらコーディングする必要があります。
上のスコープにある変数などを参照したいときなどは、いろいろtipsがあるようです。
勉強せねば。
参考となるサイトをさがしてみたので、紹介させていただきます。
○「初心者のためのスコープ講座+コールバック」
○「コールバック関数におけるスコープの概念」
○「JavaScriptの特徴とその扱い方メモ」
他にも、おすすめのサイトがありましたら、ぜひ、お教えください。