Dziedziczenie prototypowe jest proste. Ma jedną przewagę nad mixinami.
To znaczy, że jest to link na żywo. jeśli zmienisz prototyp, wszystko, co go odziedziczy, zostanie zmienione.
Przykład użycia pd
var Circle = {
constructor: function _constructor() {
this.radius = 0;
return this;
},
area: function _area() {
return this.radius * this.radius * Circle.PI
},
PI: 3.14
};
var mixedIn = pd.extend({}, Circle).constructor();
var inherited = pd.make(Circle, {}).constructor();
Circle.perimeter = perimeter;
inherited.perimeter(); // wins
mixedIn.perimeter(); // fails
function perimeter() {
return 2 * this.radius;
}
Zasadniczo więc jeśli chcesz, aby zmiany w kręgu „interfejsu” były odzwierciedlane w czasie wykonywania dla wszystkich obiektów, które „używają” jego funkcjonalności, to dziedzicz po niej.
Jeśli nie chcesz, aby zmiany odzwierciedlały, zmieszaj je.
Zauważ, że mixiny mają również większy cel. Mixiny są twoim mechanizmem wielokrotnego „dziedziczenia”.
Jeśli chcesz, aby obiekt zaimplementował wiele „interfejsów”, będziesz musiał je wmieszać. Ten, którego używasz do dziedziczenia prototypowego, to ten, dla którego zmiany mają być odzwierciedlone w czasie wykonywania, inne zostaną zmieszane.