Obiekty w JavaScript

Ten dział jest jeszcze częścią strony Klasy

Tworzenie obiektów

JavaScript Object Notation (JSON)

Nowy obiekt można stworzyć bardzo łatwo używając odpowiedniej składni:

  var obiekt = { pole: "wartość", metoda: function(){} }
  Stworzy nowy obiekt mający pole pole i metodę metoda

Nazwy pól w tej notacji nie muszą być otaczane w cudzysłów, o ile są zgodne z dopuszczalną składnią dla zmiennych JS. Jeśli zawierają spacje lub używają zarezerwowanych nazw, to należy je otaczać w cudzysłów:

 {"function": "wartość", "inne pole": "wartość"}

Obiekt nie musi być przypisywany do zmiennej — może być anonimowy i np. przekazany od razu jako parametr funkcji.

Uwaga na przecinki! Notacja JavaScript jest bardzo rygorystyczna i nie pozwala na dostawienie zbędnego przecinka za ostatnim polem obiektu.

Nowe instancje

Za pomocą operatora new można robić nowe obiekty klas.

Dostęp do pól

Są dwie notacje umożliwiające odczyt wartości z pól obiektów:

 obiekt["nazwapola"]
 Odczyta pole o nazwie nazwapola z obiektu

Nazwa pola może być dowolna, ale w przypadku, gdy nazwa pola nie zawiera znaków niedozwolonych w nazwach zmiennych, ani nie jest zarezerwowaną nazwą, to można użyć uproszczonego zapisu, który daje taki sam efekt:

 obiekt.nazwapola
 Odczyta pole o nazwie nazwapola z obiektu

Żeby odczytać pole o nazwie, która jest przechowywana w zmiennej (traktując obiekt jak tablicę asoscjacyjną), należy użyć notacji z []:

  var zmiennepole = "jakieś.pole[]!";
  obiekt[zmiennepole]
  Odczyta pole o nazwie jakieś.pole[]! z obiektu
obiekt.zmiennepole
Odczyta pole o stałej nazwie „zmiennepole”, a nie o nazwie zawartej w zmiennej.
obiekt.jakieś.pole[]!
Nie zadziała, ponieważ nazwa pola miesza się ze składnią JavaScript tworząc zupełnie inną konstrukcję.
obiekt["jakieś.pole[]!"]

Znajdowanie wszystkich pól

Konstrukcja for(x in obiekt) będzie zmiennej x kolejno przypisywać nazwy pól z obiektu.

  for(i in ob)
  {
    alert("Pole " + i + " ma wartość: " + ob[i]);
  }

Kopiowanie obiektów

Nie ma prostego sposobu na zrobienie kopii obiektu. W JavaScript wszystkie obiekty są przekazywane i przypisywane przez referencję, czyli:

 var a = {jakis: "obiekt"}
 var b = a /* tylko przypisze referencję, a nie skopiuje obiektu */

Zmienne ab będą wskazywały na dokładnie ten sam obiekt i zmiana a zawsze zmieni b.

Żeby wykonać niezależną kopię obiektu, należy rekurencyjnie skopiować wszystkie jego pola do nowego obiektu. Można to uczynić dodając do prototypu obiektu Object (po którym dzidziczą wszystki inne obiekty) funkcję zwracającą nowy obiekt ze skopiowanymi polami, np.:

 Object.prototype.clone = function() {
        var n = {};
        for (p in this) {
                n[p] = this[p];
        }
        return n;
 }

Usuwanie obiektów i pól

Elementy tablic usuwa metoda splice

Nie trzeba martwić się o usuwanie obiektów — gdy obiekt nie jest używany, zostanie automatycznie usunięty przez garbage collector.

Za pomocą operatora delete można usuwać obiekty poprzez usunięcie pól, do których są przypisane:

  window.foo = new Object();
  delete window.foo

Zmodyfikowano: 12.02.2007, 13:22