2012-09-04 8 views
6

explicar qué truco se utiliza aquí (Puedo ver que nulo se pasa como un contexto a una función que devuelve una propiedad de su contexto. Así que no puedo entender claramente lo que está sucediendo realmente aquí.nula pasa como contexto para una llamada de función

function getGlobal(){ 
    return (function(){ 
    return this.dust; 
     }).call(null); 
} 

Respuesta

6

El contexto en nulo hará this apuntando al objeto global. Por lo que el código proporcionado actuará como el acceso a la propiedad dust del objeto global.

De acuerdo con la especificación de ECMA 262 v5, 10.4.3 Introducir el código de la función

if thisArg is null or undefined, set the ThisBinding to the global object. 

ver http://es5.github.com/#x10.4.3

3

el truco es usar el hecho de que si usted no tiene un receptor de la función, (de hecho el objeto global de la secuencia de comandos ejecutados, de ahí el nombre) se utiliza window.

Así que este truco permite pasar por alto una propiedad (dust) se define en el contexto de incrustación más cercano y utilizar el definido en el mundial objeto.

+0

¿Por qué no usar 'window.dust' directamente? ¿Puede el objeto global a veces no ser una ventana? – KOGI

+0

Raras veces hay un punto, por eso ese código es raro. Una de las razones podría ser que está haciendo una biblioteca que desea ser compatible con navegadores no motores js (por ejemplo Node.js): entonces el objeto global no se llama 'window'. Pero, en general, cuando construyes una biblioteca, evitas acceder al objeto global ... –

Cuestiones relacionadas