2011-03-12 12 views
12

Nowość w JavaScript, czytanie Crockford's Javascript: The Good Parts (między innymi)Dlaczego często używane są metody pomocnicze w JavaScript?

W czwartym rozdziale dotyczącym funkcji Crockford pokazuje jak zachować to w zewnętrznej funkcji do wykorzystania w funkcjach wewnętrznych, co rozumiem.

Moje pytanie jest, w jego przykład kodu i tony więcej jak to, dlaczego korzystać z tej funkcji pomocnika:

myObject.double = function() { 
    var that = this; 

    var helper = function() { 
     that.value = add(that.value, that.value); 
    } 
    helper(); 
}; 

Czy to może dlatego, add() siedzi w zakresie globalnym, podczas gdy wartość ta jest w myObject, więc muszę skopiować to (myObject), a następnie przenieść do globalnego, gdzie mogę pobrać add()?

W przeciwnym razie nie jestem pewien, dlaczego potrzebuję funkcji pomocnika?

Odpowiedz

13

W tej części książki demonstruje, że konwencjonalne jest używanie that podczas uzyskiwania dostępu do obiektu nadrzędnego danej funkcji w obiekcie this.

Nie trzeba używać funkcji pomocnika, aby zrobić to, co robi kod. Jest to tylko przykład ilustrujący, jak ominąć problemy z zakresu z obiektem this.

+0

Zastanawiałem się, czy to była tylko ilustracja tego pojęcia. Dzięki –

+1

dobra odpowiedź Chyba brakowało mi "tego". – airmanx86

2

Enkapsulacja. W twoim przykładzie helper() istnieje tylko w zakresie myObject.double(), nie będzie dostępny/widoczny poza nim. Uważam, że nazywa się to prywatną metodą zamiast funkcją "pomocnika".

1

Książka mówi także, że "jest ona związana z nieprawidłową wartością". Czy "zła" wartość "tego" obiektu globalnego? Sposób, w jaki naprawia to Crockford, sprawia, że ​​jestem niepewny. Czy nie mógł naprawić tego w sposób bardziej znany ludziom z "klasycznym" tłem po prostu przez wywołanie this.helper(), czyli uczynienie helper() publiczną metodą? Zgaduję, że tak i domyślam się, że zrobił to tak, jak to zrobił, aby (również) pokazać obejście, które nadal wykorzystuje wzorzec wywołania funkcji, ale chciałby, aby to potwierdzało; będąc nowym w javascript nie jestem pewien, czy moje domysły są poprawne.

Powiązane problemy