Literał obiektowy zamiast konstruktorów
O literale obiektowym kilka razy pisałem już. Tym razem napiszę o przewadze literału nad konstruktorami `Array' oraz` Object'.
W JS można stworzyć obiekt na dwa sposoby:
Sposób I
var o = new Object();
Sposób II
var o = {};
Zaletą pierwsze sposobu jest czytelność. Każdy, nawet nie znając JS programista będzie wiedział, że `new Object()' stworzy nowy obiekt... No chyba, że nie, zobaczmy taki przykład:
function example() { alert(1); }
example();
example = function() { alert(2); }
example();
Skoro do słowa kluczowego (zmiennej, która trzyma adres funkcji) możemy dynamicznie przypisać coś innego, to dflaczego byśmy nie mieli tak zrobić z 'Object' / 'Array'?
Object = function() { alert(2); }
var o = new Object();
W wyniku otrzymamy alert z napisem "2".
Wnioski:
- `Object', podobnie jak inne zmienne (w tym `Array') może być łatwo nadpisany.
- Lepiej nie używać ich, a zamiast tego używać literałów obiektowych.
Równoważne zapisy w literale obiektowym
Dla `Object':
var o = {};
Dla `Array':
var a = [];
Zagnieżdżenia
var struct = {'tablica': [], 'wielowymiarowa' : [[{}, {}, {}]];
Powyższy kod dałby taką strukturę:
obiekt posiadający pola:
tablica - typu Array
wielowymiarowa - typu Array, która na 0 pozycji ma kolejną tablicę:
która ma 3 pozycje, na każdej pozycji obiekt
W kodzie"tradycyjnym" wyglądałoby to tak:
var struct = new Object(); struct.tablica = new Array(); struct.wielowymiarowa = new Array(1); struct.wielowymiarowa[0] = new Array(3); struct.wielowymiarowa[0][0] = new Object(); struct.wielowymiarowa[0][1] = new Object(); struct.wielowymiarowa[0][2] = new Object();
Co można ewentualnie zapisać krócej:
var struct = new Object(); struct.tablica = new Array(); struct.wielowymiarowa = new Array(new Array(new Object(), new Object(), new Object()));
Jak łatwo zauważyć, nie tylko z powodów bezpieczeństwa używania kodu i pewności wyników warto stosować literałów obiektowych. Także rozmiar kodu jest istotny. A rozmiar kodu, w przypadku JS ma znaczenie.
Listopad 8th, 2011 - 00:26
Tylko kto używa, takich struktor jak ta z przykladu:p
Listopad 8th, 2011 - 00:28
Znalazłoby się paru programistów