Tento článok je pokračovaním série o dedičnosti v JavaScripte:
- JavaScript zvnútra 1/4: Dedičnosť objektov
- JavaScript zvnútra 2/4: Konštruktory
- JavaScript zvnútra 3/4: Prototyp konštruktora
- JavaScript zvnútra 4/4: Dedičnosť medzi triedami
Predsa však, bežnejšia, dostupnejšia a bezpečnejšia forma dedičnosti ako tá čisto objektová je pomocou konštruktorov. Kým sa dostanem k samotnej dedičnosti, nutno jest pochopiť konštruktory.
Konštruktor je objekt triedy Function, teda funkcia:
function Fruit( color )
{
this.color = color;
}
var apple = new Fruit( "red" );
alert(apple.color); // => "red"
Tým sme vytvorili objekt apple, inštanciu Fruit,
ktorý má vlastnosť color nastavenú na red. Za
operátorom new sedí kus kódu, ktorý okrem iného zavolá
funkciu Fruit tak, že jej nastaví this na
apple. Asi takto:
// Vytvorí obyčajný objekt
var apple = new Object();
// Zavolá nad ním metódu Fruit
Fruit.call( apple, "red" );
alert( apple.color ); // => "red"
Pomocou konštruktora teda pripravíme objekt tým, že mu nastavíme základné vlastnosti. (Špecifikácia ECMAScript 262 tento proces popisuje detailne v sekcii 13.2.2.)
Metódy
Pridajme metódu yellColor, ktorá zareve farbu. Prvé čo nás
napadne je:
function Fruit( color )
{
this.color = color;
this.yellColor = function() // Toto je fakt že zle
{
alert( this.color );
};
}
var apple = new Fruit( "red" );
apple.yellColor(); // => "red"
Kód nám síce funguje, nie že nie. Predstavme si ale, že chceme vytvoriť celé vrece červeného ovocia. Povedzme takých 100ks:
var bag = [];
for( var i = 0; i < 100; i++ )
{
bag.push( new Fruit( "red" ) );
}
Pre každú jednu inštanciu vytvoríme jeho vlastnú metódu, čím si úspešne zahrávame s časom a nárokmi na pamäť. Skúsme si rozpísať čo sa vlastne deje:
var bag = [];
for( var i = 0; i < 100; i++ )
{
var apple = new Object();
apple.color = "red";
apple.yellColor = function()
{
alert( this.color );
}
bag.push( apple );
}
Vytvárať kvôli 100ks ovocia 100ks metód je celkom luxus, ktorý si
môžeme dovoliť iba málokedy. A nie je to len o rýchlosti a pamäti. Ak by
sme takýto kód nechali v našej knižnici a pre jeden z desiatich projektov
by sme potrebovali vypisovať farbu ovocia napríklad do konzoly
(console.log), neostáva nám iba vytvoriť novú vetvu kódu
s iným konštruktorom.

Riešením je definovať metódy na prototype
konštruktora (v ďalšej časti).
Ďalšie časti:
- JavaScript zvnútra 1/4: Dedičnosť objektov
- JavaScript zvnútra 2/4: Konštruktory
- JavaScript zvnútra 3/4: Prototyp konštruktora
- JavaScript zvnútra 4/4: Dedičnosť medzi triedami