Profesjonalne JavaScript dla programistów WWW, wydanie trzecie Nicholas C. Zakas (Wrox, 2012, p.210-215 opisuje "kombinacja Parasitic Inheritance" za pomocą następujących funkcji:"pasożytnicze Kombinacja Inheritance" w profesjonalnych JavaScript dla programistów WWW
.function inheritPrototype(subType, superType) {
var prototype = object(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
muszę jeszcze dowiedzieć się, co przypisanie podtypu do prototype.constructor robi lub ma robić Chyba jestem brakuje czegoś, wyjście zostanę przy użyciu kodu przykładu jest taki sam:
Bez "obiektu rozszerzenia" (prototype.constructor = subType;) w dziedziczeniuPrototype: http://jsfiddle.net/Q22DN/
Z "rozszerzyć przedmiot" (prototype.constructor = podtypu;) w inheritPrototype http://jsfiddle.net/eAYN8/
Może to być naprawdę linia kodu bezcelowego? Dziękuję za wyjaśnienie!
jest jakiś powód do preferujesz ten wzór do goog.inherits? http://docs.closure-library.googlecode.com/git/closure_goog_base.js.source.html#line1466 Podoba mi się, jak ustawia on 'superClass_' w potomku, aby można było nadpisać metody nadrzędne i nadal wywoływać je z potomka. – HMR
@HMR: Różne wzorce dziedziczenia mają tendencję do lepszej pracy z różnymi funkcjami (w jaki sposób wchodzisz w interakcję z "normalnymi" klasami, jeśli potrafisz obsługiwać wiele dziedziczenia, prywatne lub chronione zmienne, super itd.). Osobiście staram się programować w bardziej "funkcjonalnym" stylu, więc nie używam tak wielu klas, a kiedy ich używam, hierarchia jest zwykle bardzo płaska, więc nadklasy i rzeczy dziedziczenia nie kończą się zbytnio. – hugomg
Zarówno missingno, jak i Givi są poprawne, ponieważ przypisanie do konstruktora nie jest obowiązkowe, a bez niego konstruktor instancji subType (lub child) === SuperType i zresetowanie go do SubType sprawi, że te informacje będą dostępne później. Być może to wszystko. Dzięki! –