JavaScript中的装饰器对象

时间:2016-12-13 16:19:29

标签: javascript

任何人都可以解释getDecorator和 tree.BlueBalls功能有用吗?这些函数如何修改树对象?

var tree = {};
tree.decorate = function() {
  alert('Make sure the tree won\'t fall');
};

tree.getDecorator = function(deco){
  tree[deco].prototype = this;
  return new tree[deco];

};

tree.BlueBalls = function() {
  this.decorate = function() {
    this.BlueBalls.prototype.decorate();
    alert('Add blue balls');
  }
};


tree = tree.getDecorator('BlueBalls');
tree.decorate()

1 个答案:

答案 0 :(得分:0)

装饰器函数创建一个新对象(实际上是树对象的新属性)Blueballs,它以树为原型并返回它。

现在,如果您调用新创建的对象,它将首先调用其原型的decorate函数(this.BlueBalls.prototype.decorate()),然后调用其自己的decorate函数,从而产生两个警报'确保树不会掉下来'和'添加蓝球'。

对于那些不熟悉设计模式的人:decorator pattern本质上通过创建“包装器”为现有对象添加行为,因此它不会影响原始对象的行为。