Javascript node.js中模块模式的最佳实践

Javascript node.js中模块模式的最佳实践,javascript,node.js,node-modules,Javascript,Node.js,Node Modules,我一直在转换一些旧的javascript以便在node.js模块中使用,这让我想到了模块模式选项 我见过一些使用导出的结构。这让我想知道哪种方法被认为是最佳实践,为什么 下面是我用两种方法编写的代码中的简化模块示例 备选案文1: var Helper = function() {}; Helper.latin_map = {"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A"}; Helper.prototype.urlise = function(orgString

我一直在转换一些旧的javascript以便在node.js模块中使用,这让我想到了模块模式选项

我见过一些使用导出的结构。这让我想知道哪种方法被认为是最佳实践,为什么

下面是我用两种方法编写的代码中的简化模块示例

备选案文1:

var Helper = function() {};
Helper.latin_map = {"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A"};

Helper.prototype.urlise = function(orgString){
    var lower = orgString.toLowerCase();

    var latinised = lower.replace(/[^A-Za-z0-9\[\] ]/g, function(a) {
        return Helper.latin_map[a] || a;
    });

   return latinised.replace(/\s+/g, '-')
}

module.exports = new Helper();
备选案文2:

var latin_map = {"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A"};

module.exports = {
    urlise : function(orgString){
       var lower = orgString.toLowerCase();
       var latinised = lower.replace(/[^A-Za-z0-9\[\] ]/g, function(a) {
           return latin_map[a] || a;
       });

       return latinised.replace(/\s+/g, '-')
   }
}

这是一个非常简单的例子,但是我将扩展它,在同一个模块中提供几个可访问的函数,所以在我允许事情变得太复杂之前。我想我会就哪种方法被认为是最佳实践寻求一些建议。

选项2更好。您不需要构造函数和OO实例,除非您计划进行真正的OO编程,其中您创建了许多实例,每个实例都有不同的关联数据。作为一个简单的函数,此代码工作得更好。

选项2更好。您不需要构造函数和OO实例,除非您计划进行真正的OO编程,其中您创建了许多实例,每个实例都有不同的关联数据。这段代码作为一个简单的函数工作得更好

我见过许多使用exports、module.exports甚至prototype的结构,这让我想知道哪种方法被认为是最佳实践,为什么

具有.prototype的东西是构造函数,模块将它们导出为要实例化的类

当您想要导出具有静态属性的单例对象时,通常会将普通对象导出为文本,或者甚至扩展默认情况下的空导出对象,也就是说,命名空间

。助手是完全不必要的,而且通常是令人讨厌的

你应该选择第二种。如果您确实只导出了一个函数,您可能会考虑Mult.Ext=函数urrEyoGrordS{}.},但是为了导出在模块上可访问的多个函数,您的选项2正好是要使用的模式。 我见过许多使用exports、module.exports甚至prototype的结构,这让我想知道哪种方法被认为是最佳实践,为什么

具有.prototype的东西是构造函数,模块将它们导出为要实例化的类

当您想要导出具有静态属性的单例对象时,通常会将普通对象导出为文本,或者甚至扩展默认情况下的空导出对象,也就是说,命名空间

。助手是完全不必要的,而且通常是令人讨厌的


你应该选择第二种。如果您确实只导出一个函数,您可能会考虑Mult.Ext=函数urieLogGrord{{}},但是为了导出模块上可访问的多个函数,您的选项2正好是要使用的模式。不过,请不要引用我的话,我这么说只是因为我从未见过其他任何东西。我会说,选择2更标准。不过,不要引用我的话,我这么说只是因为我从未见过其他东西
 module.exports = new Helper()