[JavaScript](function() {})()とnew function() {}の違いがわかった
- 2007-08-29
- カテゴリ: Client Side
- タグ: JavaScript Tips
コンテキストが違うのか。
まずは↓のコードを参照。
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
0 件のトラックバック
1 件のコメント
-
っていうか、メソッド or コンストラクタとして使う意思がない関数の中でthisを使うのはあまり望ましくないな。
- 2007-08-30
- by LiosK
- id:-

