Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数的作用类似于装饰器,但使用变异而不是包装?_Javascript_Oop_Design Patterns - Fatal编程技术网

Javascript 函数的作用类似于装饰器,但使用变异而不是包装?

Javascript 函数的作用类似于装饰器,但使用变异而不是包装?,javascript,oop,design-patterns,Javascript,Oop,Design Patterns,装饰器通过“环绕”原始值向对象添加附加功能 是否有一个对象或函数的名称,该对象或函数接受一个预先构建的对象并通过变异向其添加附加功能? 例如: function mutatesObjects(target) { target.additionalFunctionality = "I've been mutated!"; } 这与Contractor或factory类似,不同之处在于它将功能添加到已创建的对象中 这个模式有名字吗?我建议Pluginname作为jquery插件的参考 但我也认

装饰器通过“环绕”原始值向对象添加附加功能

是否有一个对象或函数的名称,该对象或函数接受一个预先构建的对象并通过变异向其添加附加功能?

例如:

function mutatesObjects(target) {
  target.additionalFunctionality = "I've been mutated!";
}
这与Contractor或factory类似,不同之处在于它将功能添加到已创建的对象中


这个模式有名字吗?

我建议
Plugin
name作为jquery插件的参考

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

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

doSomething(object)
在最好的情况下,您可以希望
对象
状态没有更改。在更坏的情况下,你可以怀疑它是变异的,它的状态改变了

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


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

我建议将
Plugin
name作为jquery插件的参考

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

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

doSomething(object)
在最好的情况下,您可以希望
对象
状态没有更改。在更坏的情况下,你可以怀疑它是变异的,它的状态改变了

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


当然,也有一些好的用法(比如jquery插件)。

这取决于此更改的目的


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

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


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

Mixin是一个很好的名称。状态模式也适用,主要取决于您的需求。Mixin是一个很好的名称。状态模式也适用,主要取决于您的需求。