Nodejs - 使用构造函数或对象文字实现模块

时间:2014-12-15 21:47:57

标签: javascript node.js

我正在开发一个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'关键字随处可见。

在这方面,节点模块的最佳做法是什么,特别是对于其他模块经常用于网络运营的模块?建议使用构造函数/原型方法(以及为什么),或者我们应该避免使用模式,而是构建返回具有属性和函数的对象文字的函数?

1 个答案:

答案 0 :(得分:0)

在你的情况下,我会采用第一种方法,主要是出于一个原因:如果你在一个对象文字中定义一个方法,那么通过databaseHelper()创建的每个实例最终都可能拥有自己的函数副本。这当然是内存效率较低的。如果在原型上定义方法,那么只有一个函数的副本只绑定到不同的this引用。