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

Can I use require() in Node.js in a prototypical way?

本文关键字:require 方式使 原型 Node js 我可以      更新时间:2023-09-26

我一直对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

它会工作吗?如果不是,正确的等效值是什么?

new不关心函数从哪里来。所以,是的,函数可以是require模块的结果。

但是,模块必须直接导出函数。在你当前的代码中,你只是给局部 exports变量赋了一个新值,我们都知道,给一个局部变量赋值在它的作用域之外没有任何影响。

模块仍然会导出一个空对象。你必须重写moduleexports属性:

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

如前所述,会出现优先级问题,因此您必须执行

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