2017-08-13 146 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