节点.js中模块模式的最佳实践
best practice for module patterns in node.js
我一直在转换一些旧的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, '-')
}
}
这是一个非常简单的示例,但我将对其进行扩展以在同一模块中提供多个可访问的功能,因此在我允许事情变得过于复杂之前。我想我会就哪种方法被认为是最佳实践寻求一些建议。
我已经看到许多使用
exports
,module.exports
甚至原型的结构,这让我想知道哪种方法被认为是最佳实践,为什么?
具有.prototype
的东西是构造函数,模块将它们导出为要实例化的类。
导出普通对象(通常作为文字)甚至扩展默认为空的exports
对象是在您想要导出具有静态属性的"单例"对象(可以这么说是"命名空间")时使用的
module.exports = new Helper()
这几乎总是错误的。Helper
是完全不必要的,通常甚至是令人反感的。
您应该选择选项 2。如果您确实只导出了一个函数,您可能会考虑module.exports = function urlise(orgString){…}
,但是要导出模块上可访问的多个函数,您的选项 2 正是要使用的模式。
选项 2 更好。您不需要构造函数和 OO 实例,除非您计划进行真正的 OO 编程,其中您创建许多实例并且每个实例都有与之关联的不同数据。此代码作为简单函数效果更好。
相关文章:
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- JS中运行时上下文模式的最佳实践
- angularjs设计模式和从服务器获取数据的最佳实践
- 确定公开JS实用程序函数的最佳模式
- Javascript的MVC模式的最佳示例
- 节点.js中模块模式的最佳实践
- 提供模式窗口的最佳做法
- 使用jQuery命名属性的最佳模式
- 装饰器或子类化是React.Component的最佳模式
- 什么'当从AngularJS中的API响应接收到错误时,触发错误弹出模式的最佳方式
- 使用Jquery和Bootstrap处理多模式的最佳方式
- 什么'这是在加载页面时显示bootstrap 2.0模式的最佳方式
- 什么'声明和获取js对象的最佳方式是什么?(模式)
- Backbone.js中混合集合的最佳设计模式
- 在Node.js中处理异步循环的最佳模式
- 在揭示模块模式中访问私有方法的最佳实践
- 请解释这个javascript函数的定义和它们的最佳用途(模块模式)
- 在Backbone中保存对全局集合的引用的最佳模式
- 在jquery插件中添加简单的公共方法的最佳模式是什么?
- 处理编排的最佳模式.io查询