社員ブログ
HOME  社員ブログ
ホーム > JavaScript, 社員:kijitoraneko > JavaScript関数呼び出しについて少し

JavaScript関数呼び出しについて少し

2012年11月16日 12時00分49秒

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とかまで考えるともっともっとややこしいです。
勘弁してと言いたくもなります。

でもこうした背景を全く知らないでいると、
時間を無駄に費やす結果になることが多いので、
注意が必要ですね!

最近ようやくこうした部分がきちんと説明されている書籍が出るようになりましね。
しかも大量に。

うれしいことですね!
いいことですね!

JavaScript, 社員:kijitoraneko

  1. コメントはまだありません
  1. トラックバックはまだありません