像装饰器一样的功能,但使用突变而不是包装?

时间:2016-02-01 18:52:44

标签: javascript oop design-patterns

装饰器通过“包裹”原始值为对象添加附加功能。

是否有一个对象或函数的名称,用于摄取预构造的对象并通过变异为其添加其他功能?

示例:

function mutatesObjects(target) {
  target.additionalFunctionality = "I've been mutated!";
}

这类似于控制者或工厂,只是它向已经创建的对象添加功能

这个模式有名称吗?

2 个答案:

答案 0 :(得分:2)

根据此更改的目的,Monkey Patching可能适用。

“猴子补丁是程序在本地扩展或修改支持系统软件的一种方式(仅影响程序的运行实例)。”

答案 1 :(得分:1)

我建议将Plugin名称作为对jquery插件的引用。

但我也认为在大多数情况下这实际上是一种反模式。这不仅打破了封装(OOP中的主要概念之一),甚至超越了它并改变了对象功能。

想象一个简单的例子,你可以这样做:

doSomething(object)

在最好的情况下,您可以希望object状态没有改变。在更糟糕的情况下,你可以怀疑它已经发生变异并且状态发生了变化。

如果你得到与新方法或属性完全不同的东西,那真是出乎意料。

但当然,可以有很好的用法(比如jquery插件)。