Ognuno è consapevole di this
in javascript, ma ci sono anche casi di self
incontrati in natura, come ad esempio heredifferenza tra questo e l'auto in JavaScript
Quindi, qual è la differenza tra this
e self
in JavaScript?
Ognuno è consapevole di this
in javascript, ma ci sono anche casi di self
incontrati in natura, come ad esempio heredifferenza tra questo e l'auto in JavaScript
Quindi, qual è la differenza tra this
e self
in JavaScript?
A meno che altrove impostare, il valore di self
è window
perché JavaScript consente di accedere a qualsiasi proprietà x
di window
come semplicemente x
, invece di window.x
. Pertanto, self
è in realtà window.self
, che è diverso da this
.
window.self === window; // true
Se stai usando una funzione che viene eseguita in ambito globale e non è in modalità rigorosa, this
default window
, e quindi
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
Se si utilizza una funzione in un contesto diverso, this
farà riferimento a tale contesto, ma self
sarà ancora window
.
// invoke foo with context {}
foo.call({}); // true false false
Potete trovare window.self
definito nella W3C 2006 working draft for the Window Objecthere.
Per completezza, '' self'' è utile nel contesto di WebWorker quando la finestra non è accessibile (https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/ Using_web_workers). L'uso di '' self'' invece di '' window'' consente di accedere all'oggetto globale in modo portatile. – lqc
Anche se sono in ritardo qui, ma mi sono imbattuto in un esempio, che troppo può essere utile per capire this
ulteriormente:
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
Prima di ECMA 5 ,
this
nella funzione interna fare riferimento all'oggetto della finestra globale; mentre, a partire da ECMA 5,this
nella funzione interna sarebbe indefinito.
[E riguardo a questa] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) ... –
@dystroy: C'è una sola: [ ' window.self'] (https://developer.mozilla.org/en-US/docs/Web/API/window.self) ('=== window'). Anche se l'OP probabilmente significa un nome variabile banale ... – Bergi
Oh, questo tu pensi? Beh ... forse dovresti rispondere allora. –