MooTools 1.2 - podstawy podstaw cz.4
03 lipca, 2008
Przyszła pora na omówienie kwestii związanych z obiektami w MooTools. W tej części kursu omówię podstawowe funkcje frameworka operujące na obiektach : $extend, $merge, $splat, $unlink jak i zapoznamy się z podstawową implementacją obiektu Hash wraz z jego podstawowymi metodami: getLength, forEach i getClean.
Łączenie i rozszerzanie obiektów
Funkcja $extend pozwala nam rozszerzyć dany obiekt o nowe właściwości, a funkcja $merge pozwala złączyć kilka obiektów w jeden obiekt zawierający właściwości wszystkich łączonych obiektów.
Funkcję $extend można wywołać na dwa sposoby:
$extend(obiektPodstawowy,obiektRozszerzenie);
lub:
Obiekt.extend = $extend; Obiekt.extend(obiektRozszerzenie);
W obu wypadkach następuje nadpisanie właściwości obiektu jeżeli się powtarzają w podawanych jako argumenty obiektach.
Dla przykładu przyjmijmy, że mamy trzy obiekty:
przegladarka = { nazwa: "Lisek", wersja: 3 } oprogramowanie = { wersja: 5, wlasciciel: "Dziudek" } system = { wersja: 6 }
Jeżeli teraz wykonamy operację:
$extend(przegladarka,oprogramowanie);
To otrzymamy obiekt postaci:
{ nazwa: "Lisek", wersja: 5, wlasciciel: "Dziudek" }
Jak widać nie występujące w obiekcie przegladarka właściwości zostały dodane do końcowego obiektu, a właściwość wersja została zmieniona na wartość z obiektu oprogramowanie (z powodu tej samej nazwy, decyduje oczywiście kolejność obiektów. Jak to mówią - ostatni będą pierwszymi ;).
W wypadku funkcji $merge:
$merge(przegladarka,oprogramowanie);
Otrzymalibyśmy taki sam obiekt, ale już po wykonaniu kodu:
$merge(przegladarka,oprogramowanie,system);
Otrzymamy:
{ nazwa: "Lisek", wersja: 6, wlasciciel: "Dziudek" }
Zanim ktoś powie, że te funkcje działają prawie tak samo (poza liczbą argumentów), dodam jeszcze, że w wypadku funkcji $merge operacja rozszerzania/aktualizowania właściwości następuje także wtedy gdy jedna z właściwości jest obiektem (tj. mamy zagnieżdżone obiekty). Zatem weźmy dwa nowe obiekty:
strona = { title: "test", body: { menu: "opcje", stopka: "copyright" } } nowaStrona = { title: "drugi test", body: { tresc: "tekst", stopka: "All right reserved" } }
W wypadku funkcji $extend:
$extend(strona,nowaStrona);
Otrzymamy obiekt postaci:
{ title: "drugi test", body: { tresc: "tekst", stopka: "All right reserved" } }
Natomiast w wypadku $merge:
$merge(strona,nowaStrona);
Zostanie zwrócony taki obiekt:
{ title: "drugi test", body: { menu: "opcje", tresc: "tekst", stopka: "All right reserved" } }
Jak widać w $extend właściwość body nie została rozszerzona tylko zamieniona, natomiast takie działanie miało miejsce w przypadku funkcji $merge.
Pozbywamy się obiektu Hash
Funkcja $unlink powoduje zamianę wszystkich obiektów typu Hash na zwykłe obiekty (typ Object). Dzięki rekurencyjnemu mechanizmowi działania możemy dokonać takiej zamiany zarówno na obiekcie typu Hash jak i tablicy oraz obiekcie zawierającym hashe:
$unlink(TablicaHashLubObiekt);
Bezwarunkowa zamiana na tablicę
Pozostała nam jeszcze funkcja $splat, która zamienia wszystko co nie jest tablicą w obiekt typu Array. Oczywiście nie w taki sposób jak funkcja $A - po prostu jeżeli jako argument tej funkcji podamy obiekt, to zostanie zwrócona tablica jednoelementowa zawierająca tenże obiekt:
$splat(10);
Zwróci tablicę postaci:
[10]
Natomiast kod:
$splat({1:"a",2:"b"});
Zwróci tablicę:
[{1:"a",2:"b"}]
Chodzi tu o sytuacje gdy potrzebujemy tablicy w danym miejscu - podobnie jak z funkcją $lambda omawianej w poprzednich częściach kursu.
Obiekt Hash - podstawy
MooTools 1.11 posiadał plugin Hash.js, jednak podczas tworzenia MooTools 1.2 uznano obiekt Hash za jeden z ważniejszych w projekcie i włączono go do grupy Natives, czyli obiektów związanych z obiektami natywnymi JavaScript. Obiekt Hash to po prostu rozszerzona wersja obiektu natywnego Object, a jak sama nazwa wskazuje jest to coś na wzór tablicy asocjacyjnej (czyli tablicy gdzie występują pary klucz-wartość).
Aby stworzyć nowy obiekt typu Hash wystarczy następujący zapis:
new Hash({obiektZamienianyNaHash});
Ponieważ MooTools coraz bardziej dba o osoby, które nie lubią dużo pisać, więc mamy też do dyspozycji funkcję $H, która działa analogicznie do wcześniej wspomnianego kodu:
$H({obiektZamienianyNaHash});
Tak stworzony obiekt typu Hash ma dzięki plikowi Core.js zaimplementowane 3 podstawowe metody: getLength, forEach (która ma także od razu dodany alias each) oraz getClean.
Metoda getLength zwraca ilość par klucz-wartość w danym hashu:
var nowyHash = $H({"test1":1,"test2":2}); nowyHash.getLength();
Powyższy kod zwróci nam wartość 2. Działanie forEach jest analogiczne do działania tej metody w obiekcie Array, dla przypomnienia - składnia:
obiektHash.forEach(function(el, i){ /* w tej części kodu zmienna el zawiera wartość, a zmienna i zawiera klucz tejże wartości */ });
Jeżeli chcemy zamienić nasz Hash z powrotem na obiekt to służy ku temu ostatnia z omawianych w tym wpisie funkcji czyli getClean:
var nowyHash = $H({"test1":1,"test2":2}); nowyHash.getClean();
Powyższy zapis spowoduje stworzenie obiektu typu Hash o długości 2, a następnie jego zamianę na zwykły obiekt.
Podsumowanie
Podstawy podstaw MooTools 1.2 mamy za sobą - w następnej części kursu zajmiemy się detekcją przeglądarek i zdobywaniem informacji o systemie operacyjnym użytkownika.
Komentarze do wpisu "MooTools 1.2 - podstawy podstaw cz.4":
Jeszcze nie ma żadnych komentarzy. Twój może być pierwszy.
Dodaj komentarz: