我正在开发一个nodejs应用程序,它需要访问某些网络资源(例如缓存服务,数据库等)。为了访问这些资源,我编写了一个模块(通过require
导入,nodejs app用它来访问这些网络资源。
我面临的困境如下:这些模块应该使用构造函数模式还是对象文字模式来实现?
使用构造函数
通过构造函数,我的意思是这样的:
function databaseHelper = function(){
*//public properties go here*
}
databaseHelper.prototype.methodA = function methodA() {}
...
以便需要此模块的nodejs模块将使用它:
var db = require ('dbhelper.js');
var dbhelper = new db();
dbhelper.methodA();
使用对象文字
另一种方法是实现模块:
function databaseHelper = function databaseHelper(){
return {
propertyA: '',
propertyB: 100,
methodA: function methodA(){}
}
}
因此,使用此数据库帮助程序的模块将仅使用require'来实例化变量。并且不会使用' new'关键字随处可见。
在这方面,节点模块的最佳做法是什么,特别是对于其他模块经常用于网络运营的模块?建议使用构造函数/原型方法(以及为什么),或者我们应该避免使用模式,而是构建返回具有属性和函数的对象文字的函数?
答案 0 :(得分:0)
在你的情况下,我会采用第一种方法,主要是出于一个原因:如果你在一个对象文字中定义一个方法,那么通过databaseHelper()
创建的每个实例最终都可能拥有自己的函数副本。这当然是内存效率较低的。如果在原型上定义方法,那么只有一个函数的副本只绑定到不同的this
引用。