Я реализую шаблон декоратора в Javascript.
Я видел пример здесь в Википедии
// Class to be decorated
function Coffee() {
this.cost = function() {
return 1;
};
}
// Decorator A
function Milk(coffee) {
this.cost = function() {
return coffee.cost() + 0.5;
};
}
// Decorator B
function Whip(coffee) {
this.cost = function() {
return coffee.cost() + 0.7;
};
}
// Decorator C
function Sprinkles(coffee) {
this.cost = function() {
return coffee.cost() + 0.2;
};
}
// Here's one way of using it
var coffee = new Milk(new Whip(new Sprinkles(new Coffee())));
alert( coffee.cost() );
// Here's another
var coffee = new Coffee();
coffee = new Sprinkles(coffee);
coffee = new Whip(coffee);
coffee = new Milk(coffee);
alert(coffee.cost());
Теперь мой вопрос: шаблон все еще будет шаблоном декоратора, имеет ли значение, если родительский класс вызывается в начале или в конце функции cost ()?
Теперь я понимаю, что это зависит от того, что делает каждый из декораторов ... например, если вы умножаете или делите в декораторе вместо того, чтобы складывать или вычитать, это, конечно, гарантирует другой результат.
Но есть ли какая-либо причина для совершения звонка до или после, кроме причины, указанной в предыдущем абзаце?