JavaScript objektově

Seznam nedávno pořádal na FELu přednášku s názvem Programujeme objektově v Javascriptu. Jelikož z přednášky stále ještě není k dispozici video záznam ani slidy, rád bych zde nejdůležitejší body sepsal.

Je dobré v JavaSciptu nepsat procedurálně ale vše zapouzdřovat do objektů.

Tvorba objektů

Objekty lze v JavaScriptu vytvářet několika způsoby, které se výkonově liší:

literálem

var a = { attr1: 'value1', 
          attr2: function(){}
        }

"staticky"

var a = new Object();
a.attr1 = 'value1';
a.attr2 = function(){};

funkcí konstruktoru

function A(param){
   this.attr1 = param;
   this.attr2 = function(){};
}
var a = new A('value1');

funkcí konstruktoru a prototypováním

function A(param){
   this.attr1 = param;
}
A.prototype.attr2 = function(){};
var a = new A('value1');

Vývojáři Seznamu upřednostňují poslední uvedený způsob. Podle jejich měření je totiž při vytváření více instancí stejné třídy podstatně rychlejší než ostatní způsoby. Může za to fakt, že vlastnosti doplněné do třídy pomocí prototypování se při vytváření objektu nevykopírovávají.

Události

Událost lze na HTML element nabindovat několika způsoby:

  • onclick=""
  • elem.onclick=""
  • elem.attachEvent (IE), elem.addListener (FF, Opera)

Seznam doporučuje používat poslední uvedenou metodu.

Nezapomínejte, že this v těle události odkazuje na element, který událost vyvolal!

Nástroje

V IE může v určitých případech docházet k leakování paměti po uzavření webové stránky. Pokud přistupujeme k DOM objektům z JavaScriptu, mohou vznikat cyklické odkazy mezi DOM a JS objekty, které Garbage collector DOM objektů neumí řešit. To se dá odhalit pomocí nástroje Drip.

Pokud vám nevyhovuje Microsoft Script Debugger, existuje zajímavá alternativa:

Companion.JS

Nejsem odborník na JS a je proto dost možné, že jsou názvy způsobů tvorby objektů špatně.

Hodnocení

Komentáře

2007-12-17 07:49:49

No jo, kdybys chodil na přednášky TW1, na začátku semestru se tohle říkalo ;-)

[2] Dundee
2007-12-17 11:22:29

To bych nejdriv musel TW1 vubec mit :)

A je to spravne?

Komentáře již nelze přidávat