在JavaScript中定义静态类属性

在JavaScript中定义静态类属性,javascript,node.js,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

在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}`);
    }
};

是否在
模块外部定义
时刻
日期格式
。导出
,从而类定义是正确的方法?

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

  • 将它们定义为类上的static,以便可以使用类名作为前缀引用它们。这有一个优点或缺点(取决于您想要什么),即它使它们可以在导出的类上公开访问

  • 正如您所做的那样,将它们定义为模块级变量。这使得所有静态方法都可以访问它们,但它们的使用对您的模块是私有的

  • 在每个方法内部分别重新定义它们

  • 将它们定义为全局变量

  • 选项3似乎重复了很多次,肯定不会很枯燥

    选项#4似乎不是一个好方法,因为没有理由创建这些全局变量(无论如何,您几乎不想在node.js中使用全局变量)


    因此,它归结为选项1或选项2,选择哪一个完全取决于您是否希望其值在模块外部可访问。如果还希望导出它们,则将它们设置为类上的静态属性,并使用类前缀引用它们。如果您只想在模块内部使用它们,那么您所做的就是完美的。

    是的,这是一种可以接受的做事方式。您在多个函数之间共享一些变量,因此您必须在更高的范围内定义它们,以便所有函数都可以访问它们。为什么不也导出变量?@Justin-这回答了您的问题吗?