我可以以原型方式在Node.js中使用require()吗?

时间:2014-07-18 18:59:25

标签: javascript node.js require

我一直对使用JavaScript进行原型编程感兴趣,并且我正试图找出一种使用Node模块进行原型编程的有效方法。

例如,我想使用原型在我的每个模块中快速创建一个debug对象,该模块具有name属性和log方法,通过:

custom_modules / debug.js

var settings = require('custom_modules/settings');

exports = function debug(name){

    this.name = name;
    this.log = function(message){

        if (settings.debug == 'true'){

             console.log("[Debug][" + name + "]: " + message);

        }

    }

}

所以我想知道我是否可以将该模块用作构造函数,如下所示:

do_something.js

var debug = new require('custom_modules/debug')("Something Doer");

debug.log("Initialized"); // -> [Debug][Something Doer] : Initialized

会起作用吗?如果没有,那么正确的等价物是什么?

1 个答案:

答案 0 :(得分:1)

new并不关心函数的来源。所以是的,该函数可以是require模块的结果。

但是,模块必须直接导出该功能。在您当前的代码中,您只是为本地 exports变量分配一个新值,而且我们都知道分配给局部变量在其范围之外没有任何影响。 / p>

模块仍将导出空对象。您必须覆盖exports的{​​{1}}属性:

module

正如所指出的,优先级会有问题,所以你必须这样做

module.exports = function() {...};