2017-08-13 106 views
0

在Node.js的JavaScript ES6中定义静态类私有属性的最佳实践方式是什么?在JavaScript中定义静态类属性

我有以下Log类:

'use strict'; 

const moment = require('moment'); 
const LOG_DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSZ'; 

module.exports = class { 
    static debug(txt) { 
     console.log(`${moment().utc().format(LOG_DATE_FORMAT)} [debug] ${txt}`); 
    } 

    static info(txt) { 
     console.info(`${moment().utc().format(LOG_DATE_FORMAT)} [info] ${txt}`); 
    } 

    static warn(txt) { 
     console.warn(`${moment().utc().format(LOG_DATE_FORMAT)} [warn] ${txt}`); 
    } 

    static error(txt) { 
     console.error(`${moment().utc().format(LOG_DATE_FORMAT)} [error] ${txt}`); 
    } 
}; 

是定义momentDATE_FORMATmodule.exports的,因此类定义这样做的正确方法是什么?

+0

是的,这是一种可以接受的做事方式。你在多个函数中共享一些变量,所以你必须在更高的范围内定义它们,以便所有的函数都可以访问它们。 – jfriend00

+0

为什么不导出变量呢? – wrangler

回答

1

是的,这是一种可以接受的做事方式。既然你要定义你所有的静态方法之间共享一些变量,你基本上有四种选择:

  1. 它们定义的类也静这样你就可以使用类名作为前缀引用它们。这有好处或者缺点(取决于你想要什么),它可以让你在导出的类中公开访问它们。

  2. 将它们定义为模块级变量。这使得它们可以被所有的静态方法访问,但是保持它们对你的模块是私有的。

  3. 在每种方法中分别重新定义它们。

  4. 将它们定义为全局变量。

选项#3看起来像很多重复,肯定不会很干。

由于没有理由让这些全局变量(你几乎从不想使用全局变量和node.js),所以选项#4似乎不是一个好的选择。

所以,归结为选项#1或#2,选择哪个完全取决于您是否希望在模块之外访问它们的值。如果你想让它们也被导出,那么把它们变成你的类的静态属性,并用类前缀引用它们。如果你只想在模块中使用它们,那么你所做的是完美的。

+0

@Justin - 这是否回答你的问题? – jfriend00