syntax získat spojuje vlastnost objektu s funkcí, která bude volána při přístupu k této vlastnosti.

Interaktivní příklad

syntax

Parametry

Název vlastnosti, která se má svázat s danou funkcí.

Počínaje ECMAScriptem 6 můžete také použít vypočítané výrazy názvu vlastnosti k navázání na danou funkci.

popis

Někdy chcete povolit přístup k vlastnosti, která vrací dynamicky vypočítanou hodnotu, nebo můžete chtít odrážet stav interní proměnné, aniž byste museli používat explicitní volání metody. V JavaScriptu to lze provést pomocí getter.

Není možné, aby byl getter navázán na vlastnost a aby tato vlastnost skutečně obsahovala hodnotu, ačkoli můžete použít getter a setter v kombinaci k vytvoření typu pseudovlastnosti.

Při práci se syntaxí get zvažte následující:

  • Může mít identifikátor, který je buď číslo, nebo řetězec;
  • Musí mít přesně nula nebo jeden argument (viz Nekompatibilní změna ES0: funkce doslovného získávání a nastavení musí mít nyní přesně nula nebo jeden argument pro více informací);
  • Nesmí se objevit v objektovém literálu společně s jiným get nebo prostřednictvím vstupu pro stejnou vlastnost ( , get x() > a > jsou zakázány) .

Getter lze odstranit pomocí operátoru delete.

Příklady

Definování getru na novém objektu v době inicializace tohoto objektu

Níže vytvoříme nejnovější pseudovlastnost pro objekt obj, která vypíše poslední prvek pole do konzoly protokolu.

const obj = přihlásit: ["příklad", "test"], získat poslední() if (tento.přihlásit.délka === ) zpáteční nedefinované; zpáteční tento.přihlásit[tento.přihlásit.délka - 1]; >, >; konzole.přihlásit(Obj.poslední); // "test" 

Pamatujte, že pokus o přiřazení hodnoty nejnovější ji nezmění.

Odstranění getteru pomocí operátoru delete

Pokud chcete getter smazat, použijte delete :

smazat obj.poslední; 

Definování getru na již existujících objektech pomocí defineProperty

Chcete-li kdykoli přidat getter k existujícímu objektu, použijte Object.defineProperty().

konst o = a:  >; Objekt.definovatVlastnost(o, "b", získat: funkce () zpáteční tento.a + 1; >, >); konzole.přihlásit(o.b); // Spustí getter, který dává + 1 (což je 1) 

Použití vypočítané pojmenované vlastnosti

Poznámka: Vypočítané vlastnosti jsou experimentální technologií, která je součástí návrhů specifikace ECMAScript 6 a prohlížeče je zatím široce nepodporují. Níže uvedený kód způsobí chybu syntaxe v nepodporovaných prostředích.

var expr = "foo"; byl Obj = získat [expr]() zpáteční "bar"; >, >; konzole.přihlásit(Obj.Foo); // "bar" 

Chytré/samopřepisující/líné getry

Gettery nám dávají možnost definovat vlastnost objektu, ale nevyhodnocují hodnotu této vlastnosti, dokud není k dispozici. Getter odkládá náklady na výpočet hodnoty, dokud není hodnota potřebná, a pokud není nikdy potřeba, pak nikdy nezaplatíte.

ČTĚTE VÍCE
V jaké fázi je porod nebezpečný?

Další optimalizační technikou je být líný nebo odložit výpočet hodnoty vlastnosti a uložit ji do mezipaměti pro pozdější přístup. To oni dělají chytré nebo paměťové getry. Hodnota se vypočítá při prvním volání getteru a poté se uloží do mezipaměti, takže následná volání vrátí hodnotu uloženou v mezipaměti, aniž by se přepočítala. To je užitečné v následujících situacích:

  • Pokud je výpočet hodnoty vlastnosti drahý (zabírá hodně paměti RAM nebo CPU, vytváří pracovní vlákno, načítá vzdálený soubor atd.).
  • Pokud tato hodnota nyní není potřeba. Bude použit později, nebo v některých případech není použit vůbec.
  • Pokud je použit, bude přístupný několikrát a není třeba jej přepočítávat, protože hodnota se nezmění, nebo by se neměla přepočítávat.

To znamená, že pro vlastnost, jejíž hodnotu se chystáte změnit, nemusíte používat líný getr, protože getter hodnotu nepřepočítá.

V následujícím příkladu má objekt getter jako svou vlastní vlastnost. Když je vlastnost načtena, vlastnost je z objektu odstraněna a přidána znovu, ale tentokrát implicitně, jako vlastnost data. V důsledku toho je vrácena hodnota.

získat oznamovatele() vymazat tento.oznamovatele; zpáteční tento.oznamovatele = dokument.getElementById("bookmarked-notification-anchor"); >, 

Pro Firefox viz také modul XPCOMUtils.jsm, který definuje funkci defineLazyGetter().

získat a definovatVlastnost

Použití klíčového slova get a Object.defineProperty() poskytuje podobné výsledky, ale při použití ve třídách je mezi nimi nepatrný rozdíl.

Při použití get bude vlastnost definována v prototypu objektu, zatímco při použití Object.defineProperty() bude vlastnost definována v instanci, na kterou je aplikována.

třída Příklad získat ahoj() zpáteční "svět"; > > const Obj = nový Příklad(); konzole.přihlásit(Obj.ahoj); // "svět" konzole.přihlásit(Objekt.getOwnPropertyDescriptor(Obj, "Ahoj")); //nedefinováno konzole.přihlásit( Objekt.getOwnPropertyDescriptor(Objekt.getPrototypeOf(Obj), "Ahoj"), ); // , sada: nedefinováno > 

Specifikace

specifikace
Specifikace jazyka ECMAScript
# sek-metoda-definice

Kompatibilita prohlížeče

BCD tabulky se načítají pouze v prohlížeči

viz též

  • setr
  • vymazat
  • Object.defineProperty()
  • Object.prototype.__defineGetter__()
  • Object.prototype.__defineSetter__()
  • Definování Getterů a Setterů v JavaScript Guide

Našli jste na této stránce problém s obsahem?

  • Upravte stránku na GitHubu.
  • Nahlaste problém s obsahem.
  • Podívejte se na zdroj na GitHubu.

Tato stránka byla naposledy upravena 4. srpna 2023 od přispěvatelů MDN.

ČTĚTE VÍCE
Jak se jmenuje kohout na domě?

Váš plán pro lepší internet.