this
JavaScript では誰もが知っていることですが、ここself
のように実際に遭遇した例もあります。
では、 JavaScriptのthis
との違いは何ですか?self
this
JavaScript では誰もが知っていることですが、ここself
のように実際に遭遇した例もあります。
では、 JavaScriptのthis
との違いは何ですか?self
他に設定されていない限り、 の値self
はJavaScriptで の任意のプロパティに の代わりに ,として簡単にアクセスできるwindow
ためです。したがって、は 本当にであり、 とは異なります。x
window
x
window.x
self
window.self
this
window.self === window; // true
グローバル スコープで実行され、strict モードではない関数を使用している場合、this
デフォルトはに設定されるwindow
ため、
function foo() {
console.log(
window.self === window, // is self window?
window.self === this, // is self this?
this === window // is this window?
);
}
foo(); // true true true
別のコンテキストで関数を使用している場合、this
はそのコンテキストを参照しますがself
、window
.
// invoke foo with context {}
foo.call({}); // true false false
ここでWindow オブジェクトのW3C 2006 ワーキング ドラフトでwindow.self
定義されていることがわかります。
私はここに遅れていますが、さらに理解するのに役立つ1つの例に出くわしましたthis
:
var myObject = {
foo: "bar",
func: function() {
var self = this;
console.log("outer func: this.foo = " + this.foo);
console.log("outer func: self.foo = " + self.foo);
(function() {
console.log("inner func: this.foo = " + this.foo);
console.log("inner func: self.foo = " + self.foo);
}());
}
};
myObject.func();
O/P
outer func: this.foo = bar
outer func: self.foo = bar
inner func: this.foo = undefined
inner func: self.foo = bar
ECMA 5 より前
this
は、内部関数でグローバル ウィンドウ オブジェクトを参照していました。一方、ECMA 5 の時点this
では、内部関数は未定義です。