/ / Dlaczego nowy Parent () często jest używany do inicjowania prototypów dzieci zamiast Object.create (Parent.prototype)? - javascript, dziedziczenie, prototyp, instancja, nowy operator

Dlaczego nowy Parent () jest często używany do inicjowania prototypów dzieci zamiast Object.create (Parent.prototype)? - javascript, dziedziczenie, prototyp, instancja, new-operator

W środku Strona dokumentacji Mozilli przełącza (bez wyraźnego wyjaśnienia) przykłady

WorkerBee.prototype = Object.create(Employee.prototype);

do

WorkerBee.prototype = new Employee;

Druga forma new Employee zainicjuje prototyp WorkBee z właściwościami, które powinny istnieć tylko w instancjach WorkBee.

Dlaczego drugi formularz jest używany w tak wielu przykładach dziedziczenia JavaScript? Czy nie jest to niepożądane, aby nadawać odmienny status odziedziczonym właściwościom względem własnych właściwości?

Status nazwy właściwości pracownika wewnątrz WorkBee jest inny niż projektów właściwości, ponieważ nazwa jest zdefiniowana w WorkBee.prototype.name, podczas gdy projekty są definiowane w instancji WorkBee.

Ogólnie, dlaczego ktokolwiek miałby kiedykolwiek chcieć użyć konstruktora nie-abstrakcyjnej klasy X do zainicjowania prototypu klasy pochodnej Y w JavaScript?

Moim zdaniem obaj konstruktorzy powinni być tylkoużywany do inicjalizacji instancji X i Y, a jeśli Y pochodzi z X, konstruktor X powinien zainicjować instancje Y, a nie prototyp Y. Ale jeśli X jest abstrakcyjny, co oznacza, że ​​nie oczekujemy instancji X, tylko wtedy możemy potencjalnie użyć konstruktora X jako miejsca do inicjalizacji prototypów klas pochodnych.

Odpowiedzi:

1 dla odpowiedzi № 1

Dlaczego drugi formularz jest używany w tak wielu przykładach dziedziczenia JavaScript?

Ponieważ nie pozbyliśmy się go i rozprzestrzenia się. Zobacz także tutaj dla jakiejś historii.

Czy nie jest to niepożądane, aby nadawać odmienny status odziedziczonym właściwościom względem własnych właściwości?

Tak, absolutnie.