Próbuję utworzyć metodę get i set dla właściwości:
private _name: string;
Name() {
get:
{
return this._name;
}
set:
{
this._name = ???;
}
}
Jakie jest słowo kluczowe, aby ustawić wartość?
typescript
MuriloKunze
źródło
źródło
typescript private name: string; getName() { get: { return this.name; } set: { this.name = ???; } }
Odpowiedzi:
TypeScript używa składni getter / setter, która jest podobna do ActionScript3.
Spowoduje to wygenerowanie tego kodu JavaScript przy użyciu funkcji ECMAScript 5
Object.defineProperty()
.Aby go użyć,
Aby jednak w ogóle z niego korzystać, należy się upewnić, że kompilator TypeScript jest ukierunkowany na ECMAScript5. Jeśli korzystasz z kompilatora wiersza poleceń, użyj
--target
flagi w ten sposób;Jeśli używasz programu Visual Studio, musisz edytować plik projektu, aby dodać flagę do konfiguracji dla narzędzia do budowania TypeScriptCompile. Możesz to zobaczyć tutaj :
Jak @DanFromGermany sugeruje poniżej, jeśli po prostu czytasz i piszesz lokalną właściwość
foo.bar = true
, to posiadanie pary setera i gettera to przesada. Zawsze możesz je dodać później, jeśli chcesz coś zrobić, na przykład zalogować się, za każdym razem, gdy właściwość jest czytana lub zapisywana.źródło
myFoo.bar = true
zamiastmyFoo.bar(true);
lubmyFoo.setBar(true);
??Ezward udzielił już dobrej odpowiedzi, ale zauważyłem, że jeden z komentarzy dotyczy tego, jak się go stosuje. Dla osób takich jak ja, którzy natkną się na to pytanie, pomyślałem, że przydatne byłoby posiadanie linku do oficjalnej dokumentacji na temat programów pobierających i ustawiających na stronie internetowej Typescript, ponieważ to dobrze to wyjaśnia, mam nadzieję, że zawsze będzie na bieżąco, ponieważ zmiany są wprowadzane wykonane i pokazuje przykładowe użycie:
http://www.typescriptlang.org/docs/handbook/classes.html
W szczególności dla tych, którzy się z nim nie zaznajomili, zauważ, że nie włączasz słowa „get” do wywołania gettera (i podobnie dla seterów):
Powinieneś po prostu to zrobić:
biorąc udział w klasie takiej jak:
wtedy zostanie wywołany getter „bar” dla prywatnej właściwości „_bar”.
źródło
Oto działający przykład, który powinien wskazać właściwy kierunek:
Funkcje pobierające i ustawiające w JavaScript są zwykłymi funkcjami. Seter jest funkcją, która przyjmuje parametr, którego wartość jest ustawianą wartością.
źródło
static
.Foo._name
należy zastąpićthis._name
Możesz to napisać
źródło
public
definiuje tutaj zduplikowanych członków.TS oferuje metody pobierające i ustawiające, które pozwalają właściwościom obiektu na większą kontrolę nad tym, jak są one uzyskiwane (getter) lub aktualizowane (ustawiające) poza obiektem. Zamiast bezpośredniego dostępu lub aktualizacji właściwości wywoływana jest funkcja proxy.
Przykład:
źródło
Jest bardzo podobny do tworzenia powszechnych metod, wystarczy umieścić słowo kluczowe zastrzeżone
get
lubset
na początku.W takim przypadku możesz pominąć wpisz return
get getMethod1() {
źródło
Myślę, że prawdopodobnie rozumiem, dlaczego to takie mylące. W twoim przykładzie chcieliśmy getterów i seterów
_name
. Ale osiągamy to, tworząc metody pobierające i ustawiające dla niepowiązanej zmiennej klasowejName
.Rozważ to:
Powyższy kod wykonuje następujące czynności:
get
iset
twórz getter i setter dlayourCarTiresCount
( nie dlatiresCount
).Getter to:
a seter jest:
To znaczy, za każdym razem, gdy to robimy
new Car().yourCarTiresCount
, getter biegnie. I dla każdegonew Car().yourCarTiresCount('7')
setera biegnie.tireCount
.źródło
Jeśli szukasz sposobu na użycie get i set na dowolnym obiekcie (nie klasie),
Proxy
może być przydatne: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ProxyUwaga: pamiętaj, że jest to nowy interfejs API nieobsługiwany i wymagany do wypełniania starszych przeglądarek
źródło
Jeśli pracujesz z modułami TypeScript i próbujesz dodać eksportowany moduł pobierający, możesz zrobić coś takiego:
Następnie w innym pliku masz:
źródło
this
musi być niezdefiniowany w zakresie najwyższego poziomu modułu. Możesz użyćexports
zamiast tego, ale nie powinieneś tego robić, ponieważ praktycznie gwarantuje to problemy ze zgodnością