2012-02-09 9 views

Respuesta

8

window es la referencia a la ventana actual del navegador donde se ejecuta el script. window.self es obviamente una autorreferencia de eso dentro de sí mismo. Y dado que self aquí es una propiedad del objeto global window, también se puede acceder como si fuera una variable "global": solo self.

Por lo tanto, los últimos tres son en la mayoría de los casos la misma cosa.

this Sin embargo, es completamente diferente: es una variable que apunta al alcance actual. Si se ejecuta el código siguiente en la consola:

> var myPackage = {} 
> myPackage.method = function() {console.log(this)} 
> myPackage.method() 

this estará apuntando a la myPackage objeto (el alcance de method).

+2

+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

+0

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. –

2
this 
DOMWindow 

this es siempre el contexto actual de una expresión de JavaScript fue llamado. Así que en su caso su contexto global, que es el objeto de la ventana cuando el se ejecutan en el navegador. Tenga en cuenta que ejecutar lo mismo en nodeJs le dará otro resultado.

self 
//DOMWindow 

From the MDN Docs:

Devuelve una referencia de objeto al objeto de ventana.

window 
// DOMWindow 

Es lo que ha llamado: el objeto de la ventana.

window.self 
//DOMWindow 

Es lo mismo que llamar a uno mismo porque su contexto es la ventana. Por lo tanto, si llama al window.self o solo a self o this.self, cuando se encuentre dentro del alcance global, es lo mismo.

1

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.

Cuestiones relacionadas