在JavaScript中定义静态类属性

时间:2017-08-13 02:37:51

标签: javascript node.js

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

我有以下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}`);
    }
};

moment之外定义DATE_FORMATmodule.exports,因此类定义正确的方法吗?

1 个答案:

答案 0 :(得分:1)

是的,这是一种可接受的做事方式。由于您要定义在所有静态方法中共享的一些变量,因此基本上有四种选择:

  1. 将它们定义为类的静态,以便您可以使用类名作为前缀来引用它们。这有利或不利(取决于您的需要),使其可以在您导出的课程中公开访问。

  2. 将它们定义为模块级变量。这使得它们可以通过所有静态方法访问,但是将它们的使用保密为模块。

  3. 在每种方法中单独重新定义它们。

  4. 将它们定义为全局。

  5. 选项#3似乎很多重复,当然也不会很干。

    选项#4似乎不是一个好方法,因为没有理由制作这些全局变量(你几乎不想使用带有node.js的全局变量)。

    因此,它归结为选项#1或#2,选择完全取决于您是否希望在模块外部访问它们的值。如果您也想要导出它们,那么在类上创建静态属性并使用类前缀引用它们。如果您只想在模块中使用它们,那么您所做的就是完美的。