2012-06-22 10 views
5

Como convención estilo que me gusta ser explícito cuando estoy acceder a las variables en el ámbito global, prefiriendo¿Debo usar auto o ventana para hacer referencia al alcance global?

window.example = "Hello"; 
window.alert(window.example); 

al menos detallado

example = "Hello"; 
alert(example); 

ahora tengo un módulo que puede ser utilizado directamente desde el navegador o, si están disponibles, desde un trabajador web. En los trabajadores web, el objeto global se llama self, mientras que en el navegador se llama window.

El objeto window tiene una propiedad de auto, por lo self.example = "Hello" funcionaría en ambos contextos, siempre y cuando nadie redeclares self (como sucede con frecuencia: var self = this).

¿Cuál es la mejor convención para ir?

  • Uso self y la esperanza de que nadie declara un conflicto self.
  • Si se define window, use window, de lo contrario use self.
  • ¿Algo más?

Habiéndolo pensado, me inclino a ir con el segundo.

Respuesta

6

En el ámbito global, ya sea en la página o un trabajador Web, puede escribir código como este:

(function(global) { 
    // ... whatever 
}(this); 

A continuación, dentro de esa función externa principal se puede utilizar "global" (o lo llaman "wi ndow "o" self "o" lo que sea ") y funcionará en cualquier contexto (o en Node.js para el caso).

1

me gustaría sugerir

var global; try { global = window } catch(e) { global = self } 
+0

Sorprendentemente, esto parece arrojar un error de referencia cuando se utiliza en el trabajador web. Chrome dice: "ReferenceError: No se puede encontrar la variable: ventana". Debo mencionar que estoy usando requireJS para cargar este módulo de mi trabajador, así que supongo que podría ser la fuente de alguna rareza. – RichardTowers

+0

disculpas, olvidé el manejo severo de una variable que no existe. arreglado. – matt3141

+0

'global = typeof ventana! ==" indefinido "&& ventana! == nulo? window: self; 'también parece funcionar sin error. Sin embargo, me gusta la respuesta de @Pointy. – RichardTowers

0

Usted puede crear su propia referencia a cualquiera de las ventanas o auto:

var my_window = window || self; 
+0

Pero, en un webworker, el contexto global no es una ventana, por lo que llamar al contexto global 'my_window' parece engañoso. – jfriend00

+0

El desarrollador es obviamente libre de nombrar sus variables como lo desee – jackwanders

Cuestiones relacionadas