Każdy jest świadomy this
w JavaScript, ale są też przypadki self
spotykane w naturze, takie jak hereRóżnica między tym i ja w JavaScript
Więc jaka jest różnica między this
i self
w JavaScript?
Każdy jest świadomy this
w JavaScript, ale są też przypadki self
spotykane w naturze, takie jak hereRóżnica między tym i ja w JavaScript
Więc jaka jest różnica między this
i self
w JavaScript?
ile ustawiony w innym miejscu, wartość self
jest window
ponieważ JavaScript umożliwia dostęp do wszelkich nieruchomości x
z window
jako po prostu x
zamiast window.x
. Dlatego self
jest naprawdę window.self
, który różni się od this
.
window.self === window; // true
Jeśli używasz funkcji, która jest wykonywana w ramach globalnego i nie jest w trybie ścisłym, this
domyślne do window
, a zatem
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
Jeśli używasz funkcji w inny kontekst, this
będzie odnosił się do tego kontekstu, ale self
nadal będzie window
.
// invoke foo with context {}
foo.call({}); // true false false
można znaleźć window.self
zdefiniowane w W3C 2006 working draft for the Window Objecthere.
Dla kompletności "self" jest przydatne w kontekście WebWorker, gdy okno nie jest dostępne (https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/ Using_web_workers). Użycie '' self'' zamiast '' window'' umożliwia dostęp do globalnego obiektu w przenośny sposób. – lqc
Chociaż jestem późno tutaj, ale natknąłem się na jeden z przykładów, które także mogą być pomocne w zrozumieniu this
dalej:
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
Przed ECMA 5 ,
this
w funkcji wewnętrznej będzie odnosić się do globalnego obiektu okna; podczas gdy ECMA 5,this
w funkcji wewnętrznej byłby niezdefiniowany.
[A odnośnie tego] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) ... –
@dystroy: Jest jeden: [ ' window.self'] (https://developer.mozilla.org/en-US/docs/Web/API/window.self) ('=== okno'). Chociaż OP prawdopodobnie oznacza banalną nazwę zmiennej ... – Bergi
Och, ten jeden myślisz? Cóż ... może powinieneś wtedy odpowiedzieć. –