Pregunta ¿Cuál es la diferencia entre uno mismo y la ventana?


Tengo un JavaScript que trata de detectar si la página está en marcos o no. Utilicé top.frames [] etc. y todo funciona bien.

En este guión noté que puedo usar "ventana" o "yo" indistintamente y todo sigue funcionando. ¿Es "ventana" lo mismo que "auto" cuando se usa en la página HTML?


32
2017-09-03 19:21


origen


Respuestas:


De Javascript: la guía definitiva:

El objeto Window define una cantidad de   propiedades y métodos que te permiten   para manipular la ventana del navegador web.   También define las propiedades que se refieren   a otros objetos importantes, como   el document propiedad para el   Objeto de documento. Finalmente, la ventana   objeto tiene dos autorreferencial   propiedades, window y self. Tú   puede usar cualquier variable global para   se refieren directamente al objeto Ventana.

En resumen, ambos window y self son referencias al objeto Window, que es el objeto global del javascript del lado del cliente.


17
2017-09-03 19:32



Aquí está la explicación y el ejemplo de la página MDN para window.self:

if (window.parent.frames[0] != window.self) {
   // this window is not the first frame in the list
}

window.self casi siempre se usa en comparaciones como en el ejemplo anterior, que descubre si la ventana actual es la primera subtrama en el conjunto de marcos padre.

Dado que nadie está utilizando conjuntos de marcos en estos días, creo que está bien considerar que no hay casos útiles para self. Además, al menos en Firefox, prueba contra window en lugar de window.self es equivalente.


11
2017-09-03 19:26



self es un solo lectura propiedad que puede ser más flexible que, y algunas veces utilizada a favor de window directamente. Esto es porque selfLa referencia de referencia cambia según el contexto operativo (a diferencia window.self, que solo existe si window existe). También es ideal para las comparaciones, como otros han mencionado.

Por ejemplo, si usa self dentro de un Web Worker (que vive en su propio hilo de fondo), self en realidad hará referencia WorkerGlobalScope.self. Sin embargo, si usa self en un contexto de navegador normal, self simplemente devolverá una referencia a Window.self (el que tiene document, addEventListener(), y todas las otras cosas que estás acostumbrado a ver).

TL; DR mientras .self en window.self no existirá si window no existe, usando self por sí solo señalará a Window.self en un contexto de ventana / navegador tradicional, o WorkerGlobalScope.self en un contexto de trabajador web.

Como de costumbre, MDN tiene una gran reseña sobre este tema en sus documentos de JavaScript. :)


Nota al margen: El uso de self aquí no se debe confundir con el patrón JS común de declarar una variable local: var self = this para mantener una referencia a un contexto después del cambio.

Puedes leer mas al respecto aquí: Salir de situaciones vinculantes en JavaScript.


9
2018-04-26 01:59



window y self ambos se refieren al objeto global de la página web actual.

Para más información echa un vistazo a http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific


4
2017-09-03 19:25