将方法附加到对象与使用Javascript中的函数

时间:2014-10-10 21:55:33

标签: javascript

在Javascript中,直接或通过原型链将方法附加到对象非常容易。我使用的许多库都有这种行为。一个例子是AngularJS的$资源库,其中返回的对象有一些魔术方法,如。$ save()和。$ delete(),它们触发对服务器的请求。

然而,在使用Clojure一段时间之后,我开始喜欢将数据结构传递给函数以触发行为的方法,并且对于我的下一个JavaScript项目,我考虑尝试以这种方式编写它

我的问题是,每种编程方式的优缺点是什么?

将方法直接附加到对象(因此,通常是将对象改为原位)与将对象作为纯数据结构传递到函数中的优点/缺点是什么,该函数将在处理后返回新的数据结构它

我在AngularJS中意识到,为了利用双向绑定,您通常需要使用第一个系统,但是像React这样的框架似乎可以利用原位变异或使用新的对象实例。 / p>

1 个答案:

答案 0 :(得分:1)

非常好的问题。

我区分了我的班级"即我控制的代码和"外国类",即我使用的外部代码 - 无论是内置的东西还是第三方的库。

对于我自己的代码,我通常更喜欢采用OOP方式,所以我宁愿做myObject.doSomething()而不是My.doSomething(object),但这实际上取决于。

对于"外国人"代码我几乎没有"附加"方法那里。只有绝对特殊的情况。我没有用我的方法扩展内置对象和类。我几乎从不在foreight类和实例中注入方法。

主要原因是兼容性。如果我可能向split添加一些ForeignClass方法是个好主意,那么其他人也可能会有同样的想法。他们的split可能会做一些与我完全不同的事情。看看AngularJS如何考虑这个问题:他们使用$method命名约定来试图减少碰撞。

如果您不太关注外部类或对象中的注入方法以及OOP方面的更多注意,那么它实际上取决于用例。不要在您的实际需求之前放置您的编程范例。如果你有一些领域,你可能会更好地用OO术语来设计它。反之亦然,如果你只是做无状态功能,实际上并不需要实例。

这实际上是JavaScript中最好的东西之一 - 您可以同时实现和使用不同的范例,而不会出现任何技术问题。

希望它有所帮助。

PS。其他相关术语之一是anemic data model