在Javascript中,直接或通过原型链将方法附加到对象非常容易。我使用的许多库都有这种行为。一个示例是AngularJS的$ resource库,其中返回的对象上具有一些魔术方法,例如。$ save()和。$ delete(),它们触发对服务器的请求。
但是,在使用Clojure一段时间后,我开始喜欢它的将数据结构传递给函数以触发行为的方法,对于下一个JavaScript项目,我正在考虑尝试以这种风格编写它。
我的问题是,每种编程方式的优缺点是什么?
将方法直接附加到对象上的优缺点(因此,通常是在适当位置更改对象)与将对象作为纯数据结构传递给函数将在处理后返回新的数据结构有何利弊。
我在AngularJS中认识到,要利用双向绑定通常需要使用第一个系统,但是,像React这样的框架似乎可以利用就地变异或使用对象的新实例的优势。
很好的问题。
我将“我的类”(即我控制的代码)与“外部类”(即我使用的外部代码)区分开来,无论是内置的东西还是第三方库。
对于我自己的代码,我经常喜欢去的面向对象的方式,所以我宁愿做myObject.doSomething()
比My.doSomething(object)
,但它实际上取决于。
对于“外来”代码,我在那里几乎没有“连接”方法。仅在绝对例外的情况下。我不使用我的方法扩展内置对象和类。我几乎从未将方法注入到48个类和实例中。
这样做的主要原因是兼容性。如果我觉得在上添加一些split
方法ForeignClass
是一个好主意,那么其他人可能也会有相同的想法。他们的split
所作所为可能与我的完全不同。看一下AngularJS如何看待这个问题:他们使用$method
命名约定来尝试减少冲突。
如果您不太关注外部类或对象中的注入方法,而更多地关注OOP方面,那么它实际上取决于用例。不要将编程范例放在您的实际需求之前。如果您有某些领域,最好用面向对象的术语进行设计。反之亦然,如果您只是执行无状态功能,则实例中实际上没有太多需求。
这实际上是JavaScript中最好的事情之一-您可以同时实现和使用不同的范例,而不会遇到任何技术问题。
希望能帮助到你。
ps。其他相关术语之一是贫血数据模型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句