JavaScript 模拟装饰者模式

/**
 * 抽象coffee父类,其实可以不用的
 */
function Coffee () {}
Coffee.prototype.cost = function() {
    throw '实现这个方法';
};
/**
 * 黑咖啡,其实可以不用继承的;
 */
function BlackCoffee () {}
// BlackCoffee.prototype = new Coffee();
// BlackCoffee.prototype.constructor = BlackCoffee;
BlackCoffee.prototype.cost = function() {
    return 1.99;
};
/**
 * 糖,其实可以不用继承的;
 */
function Milk (coff) {
    this.coffee = coff;
}
// Milk.prototype = new Coffee();
// Milk.prototype.constructor = Milk;
Milk.prototype.cost = function() {
    return this.coffee.cost() + 0.2;
};
/**
 * 可以开店卖咖啡了;
 */
var bc = new BlackCoffee();
var addMilk = new Milk(bc);
console.log(addMilk.cost());
原文地址:https://www.cnblogs.com/stono/p/4380499.html