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:
Nejsem odborník na JS a je proto dost možné, že jsou názvy způsobů tvorby objektů špatně.