• ベストアンサー

呼び出し方でthisが変わる

var A=new function(){this.a=function(){alert(this===window)}}; A.a();(A&&A.a)() A.aの1回目の呼び出しではfalse,2回目の呼び出しではtrueとなるのですがどうしてそうなるのかが分かりません。分かる方がいましたらご教授よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.1

後者は、(function(){alert(this==window)})(); と同じです。 (A&&A.a)が式なので。 A.a の値も function(){alert(this==window)} なのですが、これを呼び出すときにレシーバーがAになります。 (式)()のときはレシーバーが省略と見なされてthisがグローバルオブジェクトのwindowになります。 レシーバーを明示指定して呼び出した (A&&A.a).call(A) だと false になります。

yanlahi
質問者

お礼

回答ありがとうございます。call使えばいいんですね。とても参考になりました

すると、全ての回答が全文表示されます。

関連するQ&A