--- title: getter slug: Web/JavaScript/Reference/Functions/get translation_of: Web/JavaScript/Reference/Functions/get ---
{{jsSidebar("Functions")}}
Składnia get łączy właściwość obiektu z funkcją, która będzie wykonywana za każdym razem, kiedy ta właściwość jest wywoływana.

Składnia

{get prop() { ... } }
{get [expression]() { ... } }

Parametry

prop
Nazwa właściwości, która łączy ją z okresloną funkcją.
expression
Począwszy od ECMAScript 2015, można również użyć wyrażeń w celu połaczenia funkcji z nazwą właściwości, która jest obliczana.

Opis

Czasami pożądane jest aby umożliwić dostęp do właściwości, która zwraca wartość obliczaną dynamicznie lub potrzeba odzwierciedlić stan jakiejś wewnętrznej zmiennej bez potrzeby użycia wyraźnego wywołania metody. W języku JavaScript może to być osiągnięte dzięki użyciu gettera. Nie jest możliwe jednocześnie mieć getter połączony z właściwością i mieć tą właściwość (o takiej samej nazwie jak getter), która faktycznie trzyma wartość. Jednakże jest możliwe aby używać połączenia gettera i settera, żeby utworzyć rodzaj pseudo-właściwości.

Zauważ, że gdy pracujemy ze składnią get to:

Getter może być usunięty poprzez operator delete.

Przykłady

Definiowanie gettera na nowym obiekcie w inicjalizatorze obiektu.

To stworzy pseudowłaściwość latest dla obiektu obj, która zwróci ostatnio zalogowany element w tablicy log.

var obj = {
  log: ['test'],
  get latest() {
    if (this.log.length == 0) return undefined;
    return this.log[this.log.length - 1];
  }
}
console.log(obj.latest); // Zwróci "test".

Zauważ, że usiłowanie przypisania wartości do latest nie zmieni jej.

Usuwanie gettera używając operatora delete

Jeśli chcesz usunąć getter, wystarczy użyć delete :

delete obj.latest;

Definiowanie gettera na istniejącym obiekcie uzywając defineProperty

Aby dołączyć getter do istniejącego obiektu, można w każdej chwili użyć:
{{jsxref("Object.defineProperty()")}}.

var o = {a: 0};

Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } });

console.log(o.b) // Uruchamia getter, który otrzymuje yields a + 1 (which is 1)

Używanie obliczanych wartości dla właściwości.

var expr = 'foo';

var obj = {
  get [expr]() { return 'bar'; }
};

console.log(obj.foo); // "bar"

Bystre / samo-nadpisujące / leniwe gettery

Gettery dają ci możliwośc zdefiniowania właściwości obiektu, ale nie obliczają wartości właściwości dopóki nie jest ona dostępna. Getter odracza koszt obliczania wartości dopóki ta wartość jest potrzebna, a jeśli nigdy nie jest potrzebna, nie ponosi się tego kosztu.

Dodatkową techniką optymalizacyjna aby uleniwić lub opóźnić obliczanie wartości dla właściwości jak i przechować ją na później są bystre (smart) lub zmemoizowane gettery. Wartość jest obliczana gdy getter jest wywoływany za pierwszym razem, a potem jest przechowywana więc kolejne dostępy zwracają zbuforowaną wartość bez jej ponownego obliczania. Jest to użyteczne w następujących sytuacjach:

To oznacza, że nie powinno się używać leniwych getterów dla właściwości, której wartość może ulec zmianie, ponieważ taki getter nie oblicza właściwości ponownie.

W następującym przykładzie obiekt posiada getter jako swoją właściwość. Otrzymując tą właściwość, jest ona usuwana z obiektu i ponownie dodawana, ale niejawnie jako właściwość z przypisanymi danymi. W ostatecznym rozrachunku zwracana jest wartość.

get notifier() {
  delete this.notifier;
  return this.notifier = document.getElementById('bookmarked-notification-anchor');
},

Na potrzeby kodu Firefoxa, zobacz również moduł z kodem XPCOMUtils.jsm, który okresla funkcje defineLazyGetter().

Specyfikacje

Specyfikacje Status Comment
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}} {{Spec2('ES5.1')}} Initial definition.
{{SpecName('ES2015', '#sec-method-definitions', 'Method definitions')}} {{Spec2('ES2015')}} Added computed property names.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}} {{Spec2('ESDraft')}}

Zgodność z przeglądarkami

{{CompatibilityTable}}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatChrome(1)}} {{ CompatGeckoDesktop("1.8.1") }} {{ CompatIE(9) }} 9.5 3
Computed property names {{CompatChrome(46)}} {{ CompatGeckoDesktop("34") }} {{CompatNo}} {{CompatNo}} {{CompatNo}}
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{ CompatGeckoMobile("1.8.1") }} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Computed property names 47 {{CompatNo}} {{ CompatGeckoMobile("34.0") }} {{CompatNo}} {{CompatNo}} {{CompatNo}}

Zobacz również