Blog webdeveloperski Patryk yarpo Jar

Wzorzec łańcuchowy w JS oparty o fabrykę obiektów

Autor wiadomości Styczeń 11, 2011

Javascript posiada wiele sposobów na tworzenie obiektów. Jednym z nich jest wzorzec fabryki obiektów (czasem zwany wzorcem modułu). Chciałbym pokazać, jak można wykorzystując ten wzorzec stworzyć IMO wygodniejsze obiekty.

Kod prostego obiektu

var yPerson = function()
{
    var sName,
        nAge;

    function fName( name )
    {
        sName = name || sName;
        return sName;
    }

    function fAge( age )
    {
        nAge = age || nAge;
        return nAge;
    }

    return {
        name : fName,
        age  : fAge
    };
};

Jak skorzystać z takiego kodu?

Całkiem przyjemnie:

var oPerson = yPerson();
oPerson.name('Jan Kowalski');
oPerson.age(26);
alert(oPerson.name() + ' ' +  oPerson.age());

Do czego dążymy?

Chcemy uzyskać ostatecznie obiekt, którego będziemy mogli używać w ten sposób:

var oPerson = yPerson();
oPerson.name('Jan Kowalski').age(26);
alert(oPerson.name() + ' ' +  oPerson.age());

Co prawda,  przy tak prostym obiekcie zyskaliśmy tylko jedną linię. Jednak w przypadku bardziej złożonych struktur można naprawdę oszczędzić sobie sporo kodu. Wzorzec łańcuchowy jest powszechnie wykorzystywany w jQuery.

Jak to osiągnąć?

Aby osiągnąć taki efekt należy po prostu w każdej metodzie zwracać referencję na obiekt, którego używamy.

var yPerson = function()
{
    var sName,
        nAge;

    // tworz obiekt
    var oThat = {
        name : fName,
        age  : fAge
    };

    function fIsSetter( data )
    {
        return ('undefined' !== typeof data);
    }

    function fName( name )
    {
        if (fIsSetter(name))
        {
            sName =  name || sName;
            return oThat; // referencja na samego siebie
        }
        return sName; // metoda w roli gettera
    }

    function fAge( age )
    {
        if (fIsSetter(age))
        {
            nAge =  age || nAge;
            return oThat; // referencja na samego siebie
        }
        return nAge;
    }

    return oThat; // zwroc obiekt
};

Kilka zasad

To co widzisz powyżej jest wynikiem pewnego doświadczenia w programowaniu w JS. Jak może zauważyłeś, w kodzie stosuję takie zasady:

  • każdy obiekt (lub funkcję konstruktora) kończę średnikiem. Za żadną inną klamrą nie stawiam średnika
  • zmienne prywatne są zapisywane w notacji węgierskiej + cammelCase
  • zmienne lokalne są w notacji "podkreśleniowej", małymi literami
  • funkcja zwracająca obiekt, zaczyna się małą literą "y", od yarpo :). Przy okazji zgodne z zasadami proponowanymi w Mocnych stronach JS - funkcje zwracające obiekty, do których nie trzeba używać operatora `new' zaczynają się małą literą.
  • blok kodu zaczyna się w nowej linii, z pewnym wyjątkiem...

Więcej zasad w osobnym artykule:

Warto przeczytać:

Komentarze (0) Trackbacks (0)

Brak komentarzy.


Leave a comment

 

Brak trackbacków.