1

El constructor de la variable window es Window La primer variable empieza con w minúscula, y la segunda en W mayúscula. Quisiera saber sobre la segunda, ¿Qué es la función Window y cómo se usa?

document.body.innerHTML = window.constructor.name

Si yo intento llamar a la función tengo un error:

TypeError: Illegal constructor.

Window()

¿Cómo instancio una variable Window? ¿Qué utilidades puede tener?

2 Answers2

2

La clase Window como tu dices, es la super clase de la variable superglobal window.

OJO: si imprimes en consola la super clase Window dice que es una función, (Esto es porque las funciones antes de ES6 eran usadas como clases y ellas mismas eran y siguen siendo constructores), pero esta es usada como una clase superglobal es decir, la función window no es realmente una función ES UNA CLASE PRIMITIVA.

console.log(Window);

Es por eso que al ejecutar la "función" Window(), en realidad no estas "ejecutando esa función", esto da como resultado un error ilegal de constructor, ya que lo que estas intentando realmente hacer es acceder directamente al constructor de la clase Window de manera erronea:

Window();

Ahora, si hacemos un console.log del prototype de la clase superGlobal Window:

console.log(Window.prototype);

Vemos algunos datos como metodos, constantes y el constructor de la clase Window (Todos estos si lo ejecutas en otra parte que no sea este snippet).

Ahora con respecto a la pregunta... ¿Como se usa?, buena pregunta, pues la superclase Window NO SE USA POR NOSOTROS, lo que se usa es su referencia una vez se crea la pagina es decir la variable superglobal window que tiene cierta instancia, hereda de la interfaz Window, esta a su vez hereda de la interfaz AbstractView.

Esto se evidencia en el segundo parrafo de este link:

Objeto Window

y usamos su referencia porque no podemos acceder directamente de manera estática a las propiedades de esta interfaz, en vez de ello javascript nos proporciona ya una variable superglobal que se crea automaticamente al cargar la pagina, esta seria el objeto window, la cual ya contiene todos los datos, funciones constantes y eventos de la ventana las cuales pueden ser usadas directamente.

Por ultimo, no puedes instanciar una variable tipo Window, (Esto si no tengo idea del porque ya que en teoría es una clase), supongo que debe ser porque implementa una interfaz abstracta, pero el caso es que simplemente no se puede instanciar una variable de tipo Window (Ya lo intente y he buscado respuestas investigando por ahí), pero sigo sin dar con el por qué exacto de que no se pueda hacer una instancia a la clase Window.

Aunque de todas maneras hacer o intentar hacer una instancia de la clase Window, no tiene mucho sentido, ya que window no solo contiene "ya preparadas", todos los métodos clases y demás cosas de nuestra ventana, si no que ademas este nos permite modificar cosas de nuestra ventana y crear, abrir y cerrar nuevas ventanas, incluso podriamos guardar una referencia a otra ventana con algunos métodos de la variable superglobal window.

Riven
  • 5,728
  • 2
  • 7
  • 27
0

Viendo la definicion de Window :

La interfaz Window representa una ventana que contiene un documento DOM ...... Una variable global window, que representa la ventana en la que se ejecuta el script, está expuesta al código JavaScript.

window es una instancia de Window (siendo este la clase de una pestaña del navegador) , puedes observar lo siguiente:

console.log("Clase Window" , typeof(Window))
console.log("Objeto window" , typeof(window))
console.log("Que Clase la invoca?" , window.constructor.name)
Por ultimo.

window es un Objeto Global y no puede ser llamado su constructor

JackNavaRow
  • 6,836
  • 5
  • 22
  • 49