Прототип наследования прост. У него есть одно преимущество перед миксинами.
Это то, что это живая ссылка. если вы измените прототип, все, что наследует его, изменится.
Пример использования 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;
}
В общем, если вы хотите, чтобы изменения в круге «interface» отражали во время выполнения все объекты, которые «используют» его функциональность, то наследуйте от него.
Если вы не хотите, чтобы изменения отражали, смешайте их.
Обратите внимание, что миксины также имеют большее назначение. Миксины - это ваш механизм множественного «наследования».
Если вы хотите, чтобы объект для реализации несколько «интерфейсов» , то вы будете должны смешивать некоторые в. Тот , который вы используете для прототипа наследования является тот , который вы хотите изменения , чтобы отразить на время выполнения, другие будут смешаны в.