Javascript 我可以用原型的方式在Node.js中使用require()吗?
我一直对使用JavaScript进行原型编程感兴趣,我正试图找到一种使用节点模块进行编程的有效方法 例如,我想使用原型在我的每个模块中快速创建一个Javascript 我可以用原型的方式在Node.js中使用require()吗?,javascript,node.js,require,Javascript,Node.js,Require,我一直对使用JavaScript进行原型编程感兴趣,我正试图找到一种使用节点模块进行编程的有效方法 例如,我想使用原型在我的每个模块中快速创建一个debug对象,该对象具有name属性和log方法,通过以下方式构造: 自定义_模块/debug.js var settings = require('custom_modules/settings'); exports = function debug(name){ this.name = name; this.log = fun
debug
对象,该对象具有name
属性和log
方法,通过以下方式构造:
自定义_模块/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);
}
}
}
所以我想知道我是否可以将该模块用作构造函数,如下所示:
做点什么
var debug = new require('custom_modules/debug')("Something Doer");
debug.log("Initialized"); // -> [Debug][Something Doer] : Initialized
它能工作吗?如果不能,正确的等价物是什么?
new
不关心函数来自何处。因此,是的,该功能可能是require
ing模块的结果
但是,模块必须直接导出函数。在您当前的代码中,您只是将一个新值赋给局部变量导出
变量,我们都知道赋给局部变量不会产生超出其范围的任何影响
模块仍将导出空对象。您必须覆盖模块
的导出
属性:
module.exports = function() {...};
正如所指出的,优先级会有问题,所以您必须这样做
var debug = new (require('custom_modules/debug'))("Something Doer");
事实上本地
exports
变量最初充当module.exports
的别名,因此除非覆盖它,否则它看起来可以与module.exports相同的方式使用。我还不擅长在Node中使用模块,但答案是这样的。是的,module.exports===exports
(我从来没说过不是)。但如果将新值指定给导出
,则模块.exports!==导出
。require
返回的值是module.exports
的值,而不是本地变量exports
。下面是一个简化的例子:varfoo={bar:42};var bar=foo.bar;巴=21;console.log(foo.bar,bar)代码>。请注意,foo.bar
仍保留其原始值。您在示例中使用的new
方式错误。您尝试使用require
函数作为构造函数来创建新的类实例,而不是创建新的debug
实例。更多信息请参见。啊,没错。我已经修好了@LeonidBeschastny事实上,由于Felix在他的回答中注意到了这一点,我删除了修正,以保持该答案与Q保持一致。@LeonidBeschastny