Toto je recenzia knihy, ktorá má podtitul From Library User to JavaScript Developer. A ten je celkom presný. Ak ste niekedy boli v kontakte s vývojom pre web, je možné, že ste sa s JavaScriptom stretli. To je ten divný prototypový, slabotypový jazyk, ktorý beží v prehliadači (a nemá nič spoločné s Javou, aj keď názov napovedá niečo iné). Je možné, že ste v JS urobili, čo bolo nevyhnutné a ďalej sa ním už nezaoberali. Ale ak ste náhodou z tej skupiny ľudí, ktorá si povedala, že nie je až taký strašný a chcete sa stať JS vývojárom namiesto len používateľom knižníc, môžem vám odporúčať knihu JavaScript Enlightenment od Codyho Lindleya.
Autor napísal túto knihu (a tým zámerom sa vôbec netají), aby sám lepšie porozumel JavaScript. Aj keď trochu sebecký, ale stále chválihodný zámer, z ktorého môžu vo svoj prospech čerpať aj ostatní. Na tejto knihe je niečo zaujímavé. Má jednu oblasť, ktorej sa venuje a venuje sa jej naozaj dobre. Tou oblasťou já práca s objektami v JS. Kniha má 166 strán a 16 kapitol a prakticky celý obsah je venovaný JS objektom. Trúfam si povedať, že ak ju prečítate, tak v tom naozaj začnete mať jasno.
JS je prototypový jazyk. A tiež slabotypový. To druhé znamená, že má vlastne len jeden typ – object. Aby som bol presný, tak má aj tzv. primitívne typy. Tie sú viac hodnotou ako objektom v pamäti a podľa toho sa aj správajú (ako parametre sú predávané hodnotou a nie odkazom). Zaujímavejšie teda je, že všetky objekty sú jedného typu. Ale aj napriek tomu sa dokážu správať rôzne alebo obsahovať rôzne údaje. V JS je to zabezpečené tým, že JS objekt je vlastne kontajner, do ktorého viete uložiť ľubovoľnú hodnotu alebo funkciu. A teda ak chcete niekoľko objektov, ktoré vyzerajú rovnako a rovnako sa správajú, potrebujete metódu, ktorá vám taký objekt vytvorí. Potrebujete konštruktor.
Práve tento konštruktor – teda funkcia – ktorou bol objekt vytvorený, ho dokáže odlíšiť od objektov, ktoré boli vytvorené iným konštruktorom. Aby to bolo zaujímavejšie, funkcie sú v JS tiež objekty (čo s nimi umožňuje ľubovoľne manipulovať, ale to iný príbeh). A ako každý objekt aj funkcia môže mať vlastnosti, pričom existuje jedna, ktorú má každý funkcia-objekt, a to vlastnosť prototype. Funkcia, ktorá vytvorí iný objekt (teda konštruktor) potom automaticky zdieľa túto svoju vlastnosť so všetkými objektami, ktoré vytvorí (tie majú tiež vlastnosť prototype). Takto všetky objekty vytvorené jednou metódou zdieľajú jednu vlastnosť a je možné ich pomocou nej meniť. A na záver treba povedať, že konštruktor dokáže volať iný konštruktor, pričom vzniká reťaz volaní konštruktorov a rovnako aj reťaz prototype vlastností. Takto vzniká tzv. prototype chain, ktorá je niečo ako reťaz dedenia v klasickom objektovo-orientovanom jazyku.
Takto na rýchlo je to ako nová téma nepochybne ťažké sústo. Preto je táto kniha taká dobrá. Lebo si zobrala celkom komplikovanú tému a kúsok po kúsku ju krája ako koláč na tanieri a každé sústo si vychutnáva pomalým prežúvaním. Žiadne prudké skoky, žiadne implicitné predpoklady, že niečo viete. Ide tempom, aby ste boli schopní vnímať (ale tiež nezaspali). Okrem hore spomínaných mechanizmov sa čitateľ môže dozvedieť, že JS má 9 natívnych konštruktorov: Number(), String(), Boolean(), Object(), Array(), Function(), Date(), RegExp() a Error(), pričom kniha podrobne rozoberá každý z nich vrátane vlastností a funkcií, ktoré objektu pri jeho vytváraní pridajú. Autor sa tiež zaoberá tým, ako sa správa špeciálne kľúčové slovo this, aký je rozdiel, ak voláte konštrukčnú metódu s kľúčovým slovom new a bez neho alebo čo je to head a čo closure.
Ako môžete vidieť, všetky témy sa točia okolo práce s objekami v JS. Myslím, že na to, aby ste sa mohli označiť za programátora JS sú tieto vedomosti nevyhnutné (inak sa môžete diviť, prečo sa napríklad vaše objekty začali správať inak po tom, čo ste načítali do prehliadača nejakú knižnicu tretej strany). JavaScript Enlightenment je veľmi dobrá kniha ak máte v tejto oblasti medzery. Tému vysvetľuje pomaly, postupne a rozumne. Venuje sa len jednému a robí to dobre. Aby až najbližšie budete robiť s JavaScriptom, ste tomu, čo sa deje na pozadí, naozaj rozumeli.