Blog webdeveloperski Patryk yarpo Jar

Literał obiektowy zamiast konstruktorów

Autor wiadomości Luty 16, 2011

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:

  1. `Object', podobnie jak inne zmienne (w tym `Array') może być łatwo nadpisany.
  2. 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.

Komentarze (1) Trackbacks (0)
  1. Znalazłoby się paru programistów 🙂


Leave a comment

 

Brak trackbacków.