thisについて考えてみる
thisを意外と何の気なしにつかってるからいろいろ実験。
var hoge = "Global hoge"; function Hoge(){ this.hoge = "hoge"; } Hoge.prototype.func = function(){alert(this.hoge);}; var a = new Hoge(); a.func();
実行結果は『hoge』とダイアログがでる。
これは、newしたときに生成されたオブジェクト(インスタンス?)
がthisになるから、aを参照する。
この場合のthis.hogeはHoge()コンストラクタで初期化された
a.hogeが出力されているんだろう。
さっきのやつに
(function(func){func();})(a.func);
を追加してみる。
『Global hoge』とダイアログがでた。
thisの参照がaからグローバル空間に変わったのか?
関数a.func()を渡して匿名関数ないのローカル変数(関数)がになって
匿名関数はグローバル空間で実行される(上にあわせるとグローバル空間にnewされる?)。
だからthisはグローバル空間になるのか?
グローバル空間をオブジェクトとしてみたとすると、グローバル空間コンストラクタで
設定されるって考えればしっくりくるのかな?
function Foo(func){ this.hoge = "Foo hoge"; this.func = func; } var foo = new Foo(a.func); foo.func();
とすると、Foo()コンストラクタでnewされたときにFooのプロパティに
なってるからthisはfooになる。
だから『Foo hoge』がダイアログにでる。
うまくまとまらないが、thisはコンストラクタで生成されたオブジェクトを
みにいってるってことになる?