L'eredità prototipica è semplice. Ha un unico vantaggio rispetto ai mixin.
Questo è che è un collegamento live. se cambi il prototipo, tutto ciò che eredita è cambiato.
Esempio utilizzando 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;
}
Quindi in sostanza, se vuoi che le modifiche al cerchio "interfaccia" riflettano in fase di esecuzione su tutti gli oggetti che "utilizzano" la sua funzionalità, quindi ereditali da esso.
Se non vuoi che le modifiche riflettano, configuralo.
Nota che i mixin hanno anche più scopo. I mixin sono il tuo meccanismo per "ereditarietà" multipla.
Se vuoi che un oggetto implementi più "interfacce", allora sarà in cui dovrai mescolare un po '. Quello che usi per l'ereditarietà prototipica è quello che vuoi che le modifiche riflettano in fase di esecuzione , gli altri verranno mixati.