thisJavaScript では誰もが知っていることですが、ここselfのように実際に遭遇した例もあります。
では、 JavaScriptのthisとの違いは何ですか?self
thisJavaScript では誰もが知っていることですが、ここselfのように実際に遭遇した例もあります。
では、 JavaScriptのthisとの違いは何ですか?self
他に設定されていない限り、 の値selfはJavaScriptで の任意のプロパティに の代わりに ,として簡単にアクセスできるwindowためです。したがって、は 本当にであり、 とは異なります。xwindowxwindow.xselfwindow.selfthis
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では、内部関数は未定義です。