如何在模块中导出函数?

时间:2017-01-28 13:08:37

标签: javascript

亲爱的,我刚刚开始在javascript中学习模块。这是我对模块的实现:

module.exports = function(logger_level) {
    this.info = function(message) {
        stdout(message);
    };
};

function stdout(message)
{
    process.stdout.write(message+'\n');
}

我必须像这样调用它:

var logger = require('./js/logger.js');
var logger1 = new logger("info1");

logger1.info("info");

我的问题是如何更改模块的实现,以便我可以像这样调用它:

var logger = require('./js/logger.js')("info");
logger.info("info");

3 个答案:

答案 0 :(得分:2)

如果你想这样使用它,根本不需要构造函数:

module.exports = {
    info: function(message) {
        stdout(message);
    }
};

function stdout(message)
{
    process.stdout.write(message+'\n');
}
  

我刚开始用javascript学习模块。

请注意,这不是JavaScript"中的模块。这就是NodeJS"中的模块。 JavaScript的模块,直到ES2015(" ES6")才被引入,看起来和行为完全不同,但它们还没有被广泛支持。如果是,您的模块可能如下所示:

// ES2015+ syntax
export default {
    info: function(message) {
        stdout(message);
    }
};

function stdout(message)
{
    process.stdout.write(message+'\n');
}

......并像这样使用:

import logger from './logger.js';
logger.info("info");

答案 1 :(得分:1)

您可以使用对象包装构造函数并返回构造函数的实例

module.exports = {

    return new function(logger_level) {
        this.info = function(message) {
            stdout(message);
        };
    };

}

并称之为

var logger = require('./js/logger.js');
logger.info("info");

您还可以使单例模式与构造函数的单个实例一起使用

答案 2 :(得分:1)

您正在寻找factory function。将它应用于您的用例,它看起来像:

SELECT f.day, f.fedex, f.usps, f.ups
FROM table2 f
INNER JOIN table1 z ON z.idzipform = f.idnextday
WHERE z.fromzip = '64083' AND z.tozip = '94568'
UNION 
SELECT s.day, s.fedex, s.usps, s.ups
FROM table3 s
INNER JOIN table1 z ON z.idzipform = s.idscndday
WHERE z.fromzip = '64083' AND z.tozip = '94568'
UNION 
SELECT t.day, t.fedex, t.usps, t.ups
FROM table4 t
INNER JOIN table1 z ON z.idzipform = t.idthirdday
WHERE z.fromzip = '64083' AND z.tozip = '94568'