【发布时间】:2015-01-05 02:50:37
【问题描述】:
对于实用程序模块,我可以使用具有静态方法的类或仅使用导出方法。我认为第一个解决方案更好,尽管我看到了很多带有第二个选项的实现。这里有没有我没有考虑的“细微差别”?
【问题讨论】:
标签: node.js coffeescript
对于实用程序模块,我可以使用具有静态方法的类或仅使用导出方法。我认为第一个解决方案更好,尽管我看到了很多带有第二个选项的实现。这里有没有我没有考虑的“细微差别”?
【问题讨论】:
标签: node.js coffeescript
我认为具有静态方法的类更好,原因如下:
如果你的类名是Utils,默认情况下所有导入也将它导入为Utils。然而,对于导出的函数,它们可以以Utils 的形式导入,但这只是一种约定,可能并非在所有不同的地方都是如此。
在一个名为 utils.js 的文件中的一个名为 Utils 的类以及所有实用方法整齐地组合在一起,在美学上比到处定义的平面函数更令人愉悦。
一个类可以在其方法中使用properties,但为此您需要@babel/plugin-proposal-class-properties。同样,比到处定义的变量要好得多。
【讨论】:
导出方法更安全,因为您不授予对类属性的访问权限。另请注意,在 javascrpt 中,类的概念没有多大意义,它的引入是为了让具有 oo 语言背景的开发人员感觉更舒服。尝试使用对象原型。
【讨论】:
我能想到的几个选项,如果这些方法打算成为另一个类的实用方法,您可以使用手工混合:http://coffeescriptcookbook.com/chapters/classes_and_objects/mixins 或依赖下划线/lowdash 中的类似内容
如果你想要方法的封装并且仍然有扩展的能力,你可以这样做:
class Foo
foo = -> alert 'foo'
@static: -> foo()
Foo.static() #=> 'foo'
Foo.foo #=> undefined
new Foo().foo #=> undefined
class Bar extends Foo
Bar.static() # => 'foo'
jsfiddle:http://jsfiddle.net/4ne7ccxk/
【讨论】: