我一直对使用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
会起作用吗?如果没有,那么正确的等价物是什么?
答案 0 :(得分:1)
new
并不关心函数的来源。所以是的,该函数可以是require
模块的结果。
但是,模块必须直接导出该功能。在您当前的代码中,您只是为本地 exports
变量分配一个新值,而且我们都知道分配给局部变量在其范围之外没有任何影响。 / p>
模块仍将导出空对象。您必须覆盖exports
的{{1}}属性:
module
正如所指出的,优先级会有问题,所以你必须这样做
module.exports = function() {...};