任何人都可以解释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()
答案 0 :(得分:0)
装饰器函数创建一个新对象(实际上是树对象的新属性)Blueballs
,它以树为原型并返回它。
现在,如果您调用新创建的对象,它将首先调用其原型的decorate
函数(this.BlueBalls.prototype.decorate()
),然后调用其自己的decorate
函数,从而产生两个警报'确保树不会掉下来'和'添加蓝球'。
对于那些不熟悉设计模式的人:decorator pattern本质上通过创建“包装器”为现有对象添加行为,因此它不会影响原始对象的行为。