【问题标题】:export class vs functions导出类与函数
【发布时间】:2015-01-05 02:50:37
【问题描述】:

对于实用程序模块,我可以使用具有静态方法的类或仅使用导出方法。我认为第一个解决方案更好,尽管我看到了很多带有第二个选项的实现。这里有没有我没有考虑的“细微差别”?

【问题讨论】:

    标签: node.js coffeescript


    【解决方案1】:

    我认为具有静态方法的更好,原因如下:

    • 如果你的类名是Utils,默认情况下所有导入也将它导入为Utils。然而,对于导出的函数,它们可以Utils 的形式导入,但这只是一种约定,可能并非在所有不同的地方都是如此。

    • 在一个名为 utils.js 的文件中的一个名为 Utils 的类以及所有实用方法整齐地组合在一起,在美学上比到处定义的平面函数更令人愉悦。

    • 一个类可以在其方法中使用properties,但为此您需要@babel/plugin-proposal-class-properties。同样,比到处定义的变量要好得多。

    【讨论】:

      【解决方案2】:

      导出方法更安全,因为您不授予对类属性的访问权限。另请注意,在 javascrpt 中,类的概念没有多大意义,它的引入是为了让具有 oo 语言背景的开发人员感觉更舒服。尝试使用对象原型。

      【讨论】:

      • 我提到,在实用模块的情况下,它只包含函数,没有任何属性。
      • 您的回答听起来自相矛盾,如果它们只是作为语法糖引入的,那么它们应该已经被认为更好了,因为问题是主要是关于风格。
      【解决方案3】:

      我能想到的几个选项,如果这些方法打算成为另一个类的实用方法,您可以使用手工混合: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/

      【讨论】:

      • 这些样本看起来很难看。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      相关资源
      最近更新 更多