2010/12/25

無名関数内と無名コンストラクタ内でのthis

JSでthisを使うことってよくありますが、これって便利だけど分かりにくい時ありますね。


無名関数内でのthisはwindowオブジェクトを参照しています。

(function() {
console.log(this === window);
})();
// true

無名コンストラクタ呼び出しの場合、windowオブジェクトではなく
newされたオブジェクトをさします。

new function() {
console.log(this === window);
}();
// false

ちなみに、無名のコンスラクタでnewされたオブジェクトがさしているものを列挙してみます。

new function() {
console.log(this.__proto__.__proto__ === Object.prototype);
}();
// true


new function() {
console.log(this.__proto__.__proto__.constructor === Object);
}();
// true