JavaScript関数呼び出しについて少し
function hoge(){ this.prop = "global"; } var obj = { fn:function(){this.prop = 'local';} } hoge(); obj.fn(); alert(window.prop); alert(obj.prop);
こんにちは、kijitoranekoです。
この検証コードが何を意味するかというと、
JavaScriptの空気読む感じです。
alert(window.prop)の結果は「global」で、
alert(obj.prop)の結果は「local」です。
ちなみにクライアントサイドのJavaScript
(Webブラウザにのっている処理系)で実行しています。
spidermonkeyとかnodeのコンソールでは動きません。
windowという組み込み変数は
クライアントサイドJavaScriptにおいてのみ
グローバルオブジェクトを参照してくれる
組み込み変数だからです。
ここでhoge()関数内のthisは
グローバルオブジェクトを参照しており、
obj変数に代入されたオブジェクトリテラル内で
fnプロパティにセットされた関数の中で登場するthisは、
objが参照するオブジェクト(つまりはここでのリテラル表記で代入されたオブジェクト)
を参照しているわけですね。
ここでの例のようにJavaScriptの関数は呼び出し方で
挙動が違ったりといった部分がこれ以外にもあります。
callやapplyとかまで考えるともっともっとややこしいです。
勘弁してと言いたくもなります。
でもこうした背景を全く知らないでいると、
時間を無駄に費やす結果になることが多いので、
注意が必要ですね!
最近ようやくこうした部分がきちんと説明されている書籍が出るようになりましね。
しかも大量に。
うれしいことですね!
いいことですね!
最近のコメント