Co to są funkcje __defineGetter__()
i __defineSetter__()
w prototypie każdego Object
?Co to są funkcje __defineGetter __() i __defineSetter __()?
Odpowiedz
Zobacz MDN docs here dla opisu i przykładowy kod:
getter jest metodą, która pobiera wartość konkretnej nieruchomości. Seter to metoda ustawiająca wartość określonej właściwości. Można zdefiniować obiekty pobierające i ustawiające na dowolnym predefiniowanym obiekcie głównym lub obiekcie zdefiniowanym przez użytkownika, który obsługuje dodawanie nowych właściwości.
Jak wspomniano w dokumentach (i przez @ cwallenpoole), funkcje __define[GS]etter__()
są teraz przestarzałe. Jest dużo więcej szczegółów w this article. Wierzę, że funkcja defineProperty() jest teraz preferowaną składnią.
Aby odpowiedzieć na pytanie __defineGetter__()
i __defineSetter__()
są starymi/oryginalnymi metodami tworzenia gettera i setera dla właściwości obiektu. Pozwalają one używać właściwości obiektu jako pary nazwa/wartość, podczas gdy za kulisami te pary nazwa/wartość są obsługiwane przez funkcje.
Załóżmy na przykład, że chcesz odnieść się do niektórych liczb losowych w ustalonych zakresach. Możesz wyrazić je jako słowa o maksymalnym zakresie i będzie wyglądać jak własność.
var random = {};
random.__defineGetter__('ten', function() {
return Math.floor(Math.random()*10); });
random.__defineGetter__('hundred', function() {
return Math.floor(Math.random()*100); });
Pamiętaj, że chociaż powyższy przykład odpowiada na pytanie, nie powinieneś używać tego rozwiązania. Zamiast tego należy użyć nowoczesną formę pobierające i ustawiające od ES5:
var random = {
get ten() { return Math.floor(Math.random()*10); },
get hundred() { return Math.floor(Math.random()*100); }
};
jedną z powyższych konstruktów pozwoli Ci uzyskać liczbę losową takiego:
var myrand = random.ten;
// returns a result in the range 0 to 9
Czy nie mogę zrobić tego samego z funkcją, to jakie jest konkretne użycie gettera i setera? –
Tak, możesz. Mój przykład nie był świetny, ponieważ pokazuje jedynie użycie geterów i ustawiaczy. Zwykle program pobierający i ustawiający będzie wspierany przez zmienną i/lub większą funkcjonalność obliczeniową. Na przykład, jeśli masz obiekt o nazwie Temperatura, możesz mieć właściwość C i F, które zwracają temperatury w C lub F. Nie są to w rzeczywistości właściwości, ale są metodami (pobierającymi), które konwertują między wartością podstawową trzymaną w obiekcie. Albo jeden z nich może być własnością, a drugi zyskiem, który dokonuje konwersji. – Guy
- 1. Co to są `+:` i `-:`?
- 2. Co to są RFC?
- 3. Co to są funkcje getHiddenValue i setHiddenValue Node.JS, które zawijają GetPrivate i SetPrivate V8?
- 4. Co to są pojęcia?
- 5. Co to są CoreDataGeneratedAccessors?
- 6. Co to są fortuny?
- 7. Co to są dict_keys, dict_items i dict_values
- 8. Co to są ReservedCodeCacheSize i InitialCodeCacheSize?
- 9. Co to są sygnały i gniazda?
- 10. Co to są bity niższe i wyższe?
- 11. Co to są klasy S1 i S2?
- 12. Co to są aspnet50 i aspnetcore50?
- 13. Co to są: + i &: + w Ruby?
- 14. Co to są paddingStart i paddingEnd?
- 15. Co to są filtry górnoprzepustowe i filtry dolnoprzepustowe?
- 16. Co to są ograniczone szablony?
- 17. Co to są czyste zmienne?
- 18. Co to są moduły CSS3?
- 19. Co to są operatorzy zniesione?
- 20. Co to są opcje + FollowSymLinks?
- 21. Co to są błędy xsession?
- 22. Co to są "pilne dane"?
- 23. Co to są Iteratory SCARY?
- 24. Co to są pliki FTL
- 25. Co to są połączenia ZygoteInit?
- 26. Co to są opcje skrótów?
- 27. Co to są hipotetyczne indeksy?
- 28. Co to są ALL_BUILD i ZERO_CHECK i czy ich potrzebuję?
- 29. Co to jest OSGi i jakie są przykłady jego użycia?
- 30. Co to są Android SyncAdapter contentAuthority i accountType?
[Nieaktualne] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineGetter) :-) – cwallenpoole
To znaczy "stary" i "nie jest obecnie w użyciu"? –
@DOtNET Ninja - "Stary, nie jest już obsługiwany i nie powinien być używany, ale wciąż tam jest, aby nie łamać kompatybilności z osobami, które już go używają". – vcsjones