[JavaScript](function() {})()とnew function() {}の違いがわかった

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[JavaScript](function() {})()とnew function() {}の違いがわかった

コンテキストが違うのか。

まずは↓のコードを参照。

function func() {
    window.alert(this == window);
}

func();      /* true */
new func();  /* false */

newをつけずに普通に関数呼び出しをした場合は、thisはその関数が属しているオブジェクトを参照する。newをつけてコンストラクタとして呼び出すと、thisは新たに生成されたオブジェクトを参照する。

普通に関数宣言した場合は、windowオブジェクトのプロパティとして宣言されるから、newをつけずに呼び出すとthisはwindowオブジェクトを指すようになるようだ。

無名

したがって、

(function() {
    window.alert(this == window);    /* true */
})();

のように無名関数として呼び出す場合と、

new function() {
    window.alert(this == window);    /* false */
};

のように無名コンストラクタとして呼び出す場合とでは、コンテキストが異なってthisが示すオブジェクトが違うようだ。

補足

無名コンストラクタを使っても、

new function(n) {
    window.alert(n);    /* 123 */
}(123);

のようにすれば引数を渡せるということを今さっき知った。

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/32-21fd2c07

トラックバック

コメント

っていうか、メソッド or コンストラクタとして使う意思がない関数の中でthisを使うのはあまり望ましくないな。
  • 2007-08-30
  • by LiosK
  • id:-
function 命令と Functionコンストラクタの違いがわかっていない?
  • 2012-10-17
  • by 誰か
  • id:-
今さらですが、この記事はfunction命令とFunctionコンストラクタの違いとは全く無関係ですよ。
  • 2013-03-10
  • by LiosK
  • id:-

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。