Zastosowanie Obiektów ECMAScript

Tworzenie i usuwanie obiektów ma miejsce w procesie wykonywania JavaScript, zrozumienie znaczenia tego wzorca jest kluczowe dla zrozumienia całego języka.

Deklaracja i instancjalizacja

Sposób tworzenia obiektów to użycie klucza new po nazwie klasy do instancjalizacji:

var oObject = new Object();
var oStringObject = new String();

Pierwsze wiersz kodu tworzy instancję klasy Object i przechowuje ją w zmiennej oObject. Drugie wiersz kodu tworzy instancję klasy String i przechowuje ją w zmiennej oStringObject. Jeśli konstruktor nie wymaga parametrów, nawiasy okrągłe są nieobowiązkowe. Dlatego można przekształcić powyższe dwa wiersze kodu w następujący sposób:

var oObject = new Object;
var oStringObject = new String;

Odniesienia do obiektów

W poprzednich rozdziałach przedstawiliśmyKoncepcja typów odniesieńW ECMAScript nie można uzyskać dostępu do fizycznej reprezentacji obiektu, tylko do odniesienia do obiektu. Za każdym razem, gdy tworzy się obiekt, w zmiennej przechowywana jest referencja do tego obiektu, a nie obiekt sam w sobie.

Zde-referencjonowanie obiektu

ECMAScript posiadają mechanizm zbierania odpadów (garbage collection routine), co oznacza, że nie jest konieczne specjalne usuwanie obiektów w celu zwolnienia pamięci. Kiedy nie ma już odniesień do obiektu, mówi się, że obiekt został zde-referencjonowany. Podczas uruchamiania mechanizmu zbierania odpadów wszystkie zde-referencjonowane obiekty są usuwane. Po zakończeniu wykonywania kodu funkcji mechanizm zbierania odpadów jest uruchamiany, aby zwolnić wszystkie zmienne lokalne, a także w innych nieprzewidywalnych przypadkach mechanizm zbierania odpadów również jest uruchamiany.

Ustawienie wszystkich odwołań do obiektu na null, może przymusowo usunąć obiekt. Na przykład:

var oObject = new Object;
// tutaj coś zrobimy z obiektem
oObject = null;

Gdy zmienna oObject zostanie ustawiona na null, odwołanie do pierwszego utworzonego obiektu nie istnieje. Oznacza to, że podczas następnego uruchomienia programu zbierania niepotrzebnych jednostek pamięci, obiekt zostanie zniszczony.

Po użyciu obiektu, jego usunięcie z pamięci jest dobrym nawykiem. To również zapewnia, że obiekt, którego już nie używasz, nie jest dostępny, co zapobiega błędom w projektowaniu programu. Ponadto, stare przeglądarki (takie jak IE/MAC) nie mają kompleksowego programu zbierania niepotrzebnych jednostek pamięci, więc obiekty mogą nie być poprawnie zniszczone podczas wyładowania strony. Usunięcie obiektu i jego wszystkich atrybutów jest najlepszym sposobem na upewnienie się, że używasz pamięci poprawnie.

Uwaga:Uwaga: gdy usuwasz wszystkie odwołania do obiektu, bądź ostrożny. Jeśli obiekt ma dwie lub więcej odwołań, aby poprawnie usunąć obiekt, musisz ustawić wszystkie jego odwołania na null.

Wczesne i późne wiązanie

Wiązanie, to metoda łączenia interfejsu obiektu z instancją obiektu.

Wczesne wiązanie (early binding) oznacza zdefiniowanie atrybutów i metod obiektu przed jego instancjonowaniem, co pozwala kompilatorowi lub interpreterowi na wcześniejsze przekształcanie kodu w kod maszynowy. W językach takich jak Java i Visual Basic, wczesne wiązanie pozwala na użycie IntelliSense (funkcja udostępniająca listę atrybutów i metod obiektu deweloperom). ECMAScript nie jest językiem silnie typowanym, więc nie obsługuje wczesnego wiązania.

Z drugiej strony, późne wiązanie (late binding) oznacza, że kompilator lub interpreter nie zna typu obiektu przed uruchomieniem. Przy użyciu późnego wiązania, nie ma potrzeby sprawdzania typu obiektu, wystarczy sprawdzić, czy obiekt obsługuje atrybuty i metody. Wszystkie zmienne w ECMAScript korzystają z metody późnego wiązania. To pozwala na wykonywanie dużej liczby operacji na obiektach bez żadnych kar.