self
está definido por el entorno javascript y apunta al objeto [global] (pero no es parte de la especificación, por lo que podría no estar allí), mientras que window
es parte de la especificación DOM. En la mayoría de los navegadores se usa window
como el objeto [global], pero esto no siempre es así.
Eso self == window.self
no es extraño, ya que son el mismo objeto - cuando se busca self
, se encuentra como una propiedad del objeto global (window
). Por lo tanto, es de hecho lo mismo que window.self == window.self
.
Como se indicó en otra parte, para hacer referencia confiable al objeto [global]
, debe definirlo como sef ejecutando var global = this;
en el contexto de ejecución global.
¿Por qué necesita hacer una referencia? 'window' es parte del DOM, mientras que' self' se relaciona con el objeto global en javascript, que pasa a ser igual a la ventana de DOM en la mayoría de las implementaciones. En implementaciones sin navegador como Rhino, 'self' está presente, pero no' window' ya que no hay DOM. –
@Sean: 'self' no aparece en el estándar Javascript (ECMAScript). Para acceder de forma fiable al objeto global por nombre en todas las implementaciones, debe asignarle un nombre, ejecutando algo como esto en el contexto global (fuera de cualquier función): 'var global = this;' Eso funciona porque cuando el control ingresa al el código del contexto global, 'this' apunta al objeto global. 'self' no tiene ningún sentido como un nombre para el objeto global fuera del contexto' window.self' en mi humilde opinión. –
@ T.J Estaba a punto de agregar el mismo –