|
Wpisany przez Patryk yarpo Jar
|
|
niedziela, 05 września 2010 00:42 |
|
Javascript posiada wiele sposobów na tworzenie obiektów. Jednym z nich jest zworzec 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 spoor 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 that = {
name : fName,
age : fAge
};
function fIsSetter( data )
{
return ('undefined' !== typeof data);
}
function fName( name )
{
if (fIsSetter(name))
{
sName = name || sName;
return that; // zwroc referencje na samego siebie
}
return sName; // metoda w roli gettera
}
function fAge( age )
{
if (fIsSetter(age))
{
nAge = age || nAge;
return that; // zwroc referencje na samego siebie
}
return nAge;
}
return that; // zwroc obiekt
};
|