Sempre questa parola chiave si riferisce al contesto in cui è stata richiamata. Ma self e window anche dopo aver cambiato contesto si riferiscono a Window stessa.
// Log function
function logAll(){
console.log("this >", this);
console.log("self >", self);
console.log("window >", window);
console.log("window.self >", window.self);
console.log("this.self >", this.self);
};
// Class Car
function Car(){
this.self = 6;
};
// Instance of Car
var honda = new Car();
honda.self = 5;
// logAll() called in context Gloabal
logAll();
// Outputs
this > Window
self > Window
window > Window
window.self > Window
this.self > Window
// logAll() called in context honda
logAll.call(honda);
// Outputs
this > Car { self= 5 }
self > Window
window > Window
window.self > Window
this.self > 5
Qui potete vedere this.self finestra rendimenti in quando viene chiamato in ambito globale, perché di portata globale
this = windows
this.self = windows.self
this.self = Windows
Ma mentre si è nel contesto di Honda, un esempio di auto:
this = honda
this.self = honda.self
this.self = 5
Il contesto gioca un ruolo importante in Javascript, mentre si lavora con OOP e ereditarietà.
+1, ma solo per essere pedanti, 'self' e' window' sono entrambi riferimenti all'oggetto globale javascript - che contiene le due proprietà 'self' e' window' (entrambe che puntano a se stesse). Il che significa che non c'è "come se" - "window" è tanto una proprietà di "sé" quanto "self" è una proprietà di "window". E aggiungere qualcosa (leggermente) meno pedante: tutto questo (tranne per 'this' ... ;-)) è solo un dato per ECMA/Javascript in un browser. Né 'window' né' self' sono parti del linguaggio stesso e potrebbero non essere presenti in altri usi di ECMA/Javascript. – JimmiTh
In aggiunta alla pedanteria, in IE, 'window' è ... speciale. Per tutti gli scopi pratici, 'window',' self' e 'window.self' (e' this' in alcuni contesti) sono ancora equivalenti, * ma * l'operatore di uguaglianza rigorosa dice che è un oggetto diverso. Nel contesto globale, tutte queste espressioni valgono per true in IE: 'window === this',' window! == self', 'window! == window.window' e' window! == window.self '. L'operatore '==' dice che sono tutti uguali però. –