2012-09-04 13 views
6

Proszę wyjaśnić, co hack jest tutaj używany (widzę, że wartość null jest przekazywana jako kontekst do funkcji zwracającej właściwość tego kontekstu, więc nie mogę jasno zrozumieć, co się właściwie dzieje tutaj.null przekazywany jako kontekst do wywołania funkcji

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

Odpowiedz

6

Ustawienie kontekstu na wartość null spowoduje, że this wskaże obiekt globalny. Tak więc podany kod będzie działał jako dostęp do właściwości obiektu globalnego.

Według specyfikacji ECMA 262 v5, 10.4.3 Wprowadzanie kodu Funkcja

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

zobaczyć http://es5.github.com/#x10.4.3

3

Sztuką jest wykorzystanie faktu, że jeśli nie masz odbiornika funkcji, window (w rzeczywistości globalna przedmiotem wykonywanego skryptu, stąd nazwa) jest używany.

Ta sztuczka umożliwia ominięcie nieruchomości (dust) zdefiniowanej w najbliższym kontekście osadzania i użycie tej zdefiniowanej w globalnym obiekt.

+0

Dlaczego nie wystarczy użyć 'window.dust' bezpośrednio? Czy obiekt globalny może nie być czasem oknem? – KOGI

+0

Rzadko zdarza się, że taki kod jest rzadki. Powodem może być tworzenie biblioteki, która ma być kompatybilna z silnikami js innych niż przeglądarki (np. Node.js): wtedy obiekt globalny nie jest nazywany 'okienkiem'. Ale ogólnie, gdy tworzysz bibliotekę, unikasz dostępu do globalnego obiektu ... –

Powiązane problemy