Siempre esta palabra clave se refiere al contexto en el que se invocó. Sin embargo, sí mismo y la ventana incluso después de cambiar el contexto se refiere a la ventana en sí.
// 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
Aquí se puede ver this.self ventana de rendimientos en cuando se le llama en el ámbito global, porque en el ámbito global
this = windows
this.self = windows.self
this.self = Windows
Pero mientras se encuentra en el contexto de honda, una instancia de coches:
this = honda
this.self = honda.self
this.self = 5
El contexto juega un papel importante en Javascript, mientras trabaja con OOP y herencia.
+1, pero para ser pedantes, 'self' y' window' son referencias al objeto global javascript, que contiene las dos propiedades 'self' y' window' (ambos apuntan a sí mismo). Lo que significa que no hay "como si" - 'ventana' es una propiedad tanto de' self' como 'self' es una propiedad de' window'. Y para agregar algo (ligeramente) menos pedante: todo esto (excepto 'this' ... ;-)) es solo un hecho para ECMA/Javascript en un navegador. Ni 'window' ni' self' son partes del lenguaje en sí, y pueden no estar presentes en otros usos de ECMA/Javascript. – JimmiTh
Añadiendo a la pedantería, en IE, 'window' es ... especial. Para todos los propósitos prácticos, 'window',' self' y 'window.self' (y' this' en algunos contextos) siguen siendo equivalentes, * pero * el operador de igualdad estricta dice que es un objeto diferente. En el contexto global, todas estas expresiones se evalúan como verdaderas en IE: 'window === this',' window! == self', 'window! == window.window', y' window! == window.self '. El operador '==' dice que todos son iguales. –