La herencia prototípica es simple. Tiene una sola ventaja sobre los mixins.
Es que es un enlace en vivo. si cambia el prototipo, todo lo que hereda se cambia.
Ejemplo usando 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;
}
Básicamente, si desea que los cambios en el círculo de "interfaz" se reflejen en tiempo de ejecución a todos los objetos que "usan" su funcionalidad, entonces herede de ella.
Si no desea que se reflejen los cambios, mézclelos.
Tenga en cuenta que los mixins también tienen más propósito que eso. Las mixinas son su mecanismo para la "herencia" múltiple.
Si desea que un objeto implemente múltiples "interfaces", entonces tendrá que mezclar algunas. La que use para la herencia prototípica es la que desea que reflejen los cambios en el tiempo de ejecución, las otras se mezclarán.