V strede Stránka dokumentácie Mozilla prepína (bez dostatočne jasného vysvetlenia) príklady z
WorkerBee.prototype = Object.create(Employee.prototype);
na
WorkerBee.prototype = new Employee;
Druhá forma new Employee
inicializuje prototyp WorkBee s vlastnosťami, ktoré majú existovať iba v prípadoch WorkBee.
Prečo sa v toľkých príkladoch dedičnosti JavaScriptu používa druhá forma? Nie je nežiaduce dať odlišný stav zdedeným vlastnostiam oproti vlastným vlastnostiam?
Stav názvu vlastnosti zamestnanca v rámci WorkBee sa líši od názvu projektu vlastnosti, pretože názov je definovaný v WorkBee.prototype.name, zatiaľ čo projekty sú definované v inštancii WorkBee.
Prečo by vôbec niekto chcel všeobecne používať konštruktor inej ako abstraktnej triedy X na inicializáciu prototypu odvodenej triedy Y v JavaScripte?
Podľa môjho názoru by mali byť iba obaja konštruktéripoužíva sa na inicializáciu inštancií X a Y a ak je Y odvodené od X, potom by mal konštruktor X inicializovať inštancie Y, nie prototyp Y. Ale ak je X abstraktné, čo znamená, že neočakávame, že budeme mať inštancie X, až potom môžeme potenciálne použiť konštruktor X ako miesto na inicializáciu prototypov odvodených tried.
odpovede:
1 pre odpoveď č. 1Prečo sa v toľkých príkladoch dedičnosti JavaScriptu používa druhá forma?
Pretože sme sa ho nezbavili a stále sa rozširuje. Pozri tiež tu pre nejakú históriu.
Nie je nežiaduce dať odlišný stav zdedeným vlastnostiam oproti vlastným vlastnostiam?
Áno, jednoznačne.