--- title: Operatory pamięci slug: Web/JavaScript/Reference/Operators/Property_Accessors tags: - JavaScript - Operator translation_of: Web/JavaScript/Reference/Operators/Property_Accessors original_slug: Web/JavaScript/Referencje/Operatory/Operatory_pamięci ---
{{jsSidebar("Operators")}}

Operatory pamięci umożliwiają dostęp do właściwości lub metod obiektu.

Składnia

object.property
object['property']

Opis

Obiekt, w rzeczywistości, jest kojarzeniową tablicą (jak mapa, słownik, hash, poglądowa tabela). Klucze w tablicy są nazwami właściwości i metod (właściwości odnoszących się do funkcji). Istnieją dwa sposoby uzyskania dostępu do właściwości: zapis z kropką lub zapis z nawiasem (operator indeksu dolnego).

Zapis z kropką

get = object.property;
object.property = set;

property musi być nazwane poprawnie, według zasad JavaScript, innymi słowy: musi być sekwencją znaków alfanumerycznych (włączając w to znak podkreślenia oraz znak dolara), która nie zaczyna się od cyfry. Na przykład: object.$1 jest poprawny, natomiast object.1 jest nieprawidłowy.

Przykład:

document.createElement('pre');

Metoda "createElement" jest wywoływana z poziomu document.

Zapis z nawiasem
get = object[property_name];
object[property_name] = set;

property_name jest łańcuchem znaków, nie musi być poprawnym identyfikatorem - może być zupełnie dowolny, przykładowo: "1foo", "!bar!" lub nawet " " (spacja).

document['createElement']('pre');

Mimo różnic, powyższa notacja wykonuje dokładnie to samo co zapis z kropką.

Nazwy właściwości

Nazwy właściwości muszą być łańcuchami. Oznacza to, że nazwy nie będące łańcuchami nie mogą być używane jako klucze w obiekcie. Dowolny obiekt nie będący łańcuchem, wliczając w to liczby, zostanie zrzutowany do obiektu string poprzez metodę {{jsxref("Object.toString", "toString()")}}.

var object = {};
object['1'] = 'value';
alert(object[1]);

Powyższy kod wyświetla "value", ponieważ 1 został zrzutowany do '1'.

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
console.log(object[bar]);

W tym przykładzie także zostanie wypisany "value", ponieważ zarówno foo jak i bar zostały skonwertowane do tego samego łańcucha. W silniku JavaScript SpiderMonkey, łańcuch będzie wyglądał następująco: "{{ mediawiki.external('object Object') }}".

Wiązanie metod

Metoda nie jest powiązana z obiektem, którego jest metodą. Innymi słowy: this w metodzie nie jest ustawiony na sztywno. Nie musi on koniecznie odnosić się do obiektu zawierającego metodę. Zamiast tego this jest przekazywany do funkcji podczas jej wywoływania. Zajrzyj do wiązania metod po więcej informacji.

Uwaga dotycząca eval

Początkujący programiści JavaScript popełniają częsty błąd, używając eval tam gdzie może być użyty zapis z nawiasem. Poniżej zaprezentowany jest przykład.

x = eval('document.form_name.' + strFormControl + '.value');

eval jest wolno-działającą funkcją i powinien być jak najrzadziej używany. Zoptymalizowany fragment kodu brzmi:

x = document.form_name[strFormControl].value;

Specyfikacje

Specification Status Comment
{{SpecName('ESDraft', '#sec-property-accessors', 'Property Accessors')}} {{Spec2('ESDraft')}}  
{{SpecName('ES6', '#sec-property-accessors', 'Property Accessors')}} {{Spec2('ES6')}}  
{{SpecName('ES5.1', '#sec-11.2.1', 'Property Accessors')}} {{Spec2('ES5.1')}}  
{{SpecName('ES1', '#sec-11.2.1', 'Property Accessors')}} {{Spec2('ES1')}} Definicja początkowa. Zaimplementowana w JavaScript 1.0.

Kompatybilność z przeglądarkami

{{CompatibilityTable}}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}

Zobacz również