/ / Prečo sa nový Parent () často používa na inicializáciu prototypov detí namiesto Object.create (Parent.prototype)? - javascript, dedičstvo, prototyp, inštancia, nový operátor

Prečo je nový Parent () často používaný na inicializáciu prototypov detí namiesto Object.create (Parent.prototype)? - javascript, dedičstvo, prototyp, inštancia, nový operátor

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ď č. 1

Preč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.