A herança prototípica é simples. Tem uma vantagem única sobre mixins.
Isso é que é um link ao vivo. se você alterar o protótipo, tudo o que herdar será alterado.
Exemplo 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;
}
Então, basicamente, se você deseja que as alterações no círculo da "interface" sejam refletidas no tempo de execução para todos os objetos que "usam" sua funcionalidade, herda-a.
Se você não quiser que as alterações sejam refletidas, misture-as.
Observe que os mixins também têm mais finalidade do que isso. Mixins são o seu mecanismo para múltiplas "heranças".
Se você quer um objeto para implementar várias "interfaces", então você vai ter que misturar um pouco. O que você usa para a herança prototípica é o que você quer mudanças para refletir para em tempo de execução, os outros serão misturado.