javascript - NodeJS - 如何在自执行函数中将构造函数分配给 module.exports?

标签 javascript node.js constructor self-executing-function

我正在尝试在 NodeJS 中的自执行函数中分配一个构造函数。我很确定它不起作用,因为我的参数是一个指向 module.exports 的变量,但我很好奇是否有办法让它工作,同时尽可能接近自执行格式。

下面是代码的调用方式...

var TemplateEngine = require('./templateEngine');
templateEngine = new TemplateEngine({engine: 'swig'}); // "object is not a function"

这是一个运行良好的代码示例...

var assert = require('assert');
var swig = require('swig');

// Constructor
var TemplateEngine = function(args) {
    assert.ok(args.engine, 'engine is required');
    var templateEngine = {};

    templateEngine.engine = args.engine;

    templateEngine.Render = function(templateString, model) {
        var result = swig.render(templateString, model);
        return result;
    };

    return templateEngine;
};

module.exports = TemplateEngine;

这是我想使用的代码风格示例,但会产生“TypeError: Object is not a function”错误,因为我实际上并没有分配给 module.exports,只是一个复制任何内容的变量它指向。

(function(templateEngine) {
    var assert = require('assert');
    var swig = require('swig');

    templateEngine = function(args) {
        assert.ok(args.engine, 'engine is required');
        var templateEngine = {};

        templateEngine.engine = args.engine;

        templateEngine.Render = function (templateString, model) {
            var result = swig.render(templateString, model);
            return result;
        };

        return templateEngine;
    };
})(module.exports);

有没有办法让我使用上述自执行格式并让我的模块导出构造函数?

最佳答案

在您的第二个示例中,您只是简单地覆盖了 templateEngine 参数,这不会产生任何影响。

要获得与第一个示例相同的结果,只需:

module 传递到您的 IIFE 中:

(function(module) {

})(module);

为其分配一个属性:

(function(module) {
    var assert = require('assert');
    var swig = require('swig');

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

})(module);

关于javascript - NodeJS - 如何在自执行函数中将构造函数分配给 module.exports?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28507541/

相关文章:

javascript - 高亮值变化 ReactJS

javascript - 限制指定用户每分钟执行一次功能

c++ - 类层次结构中的约束构造函数,C++

c# - 自定义控件构造函数

javascript - 用 Jade 插入包含指令?

c++ - 命名构造函数和继承

javascript - 在 JavaScript 中解释用户输入的日期

javascript - django-summernote 小部件元素的自定义 javascript 不起作用?

Javascript 数组与 json 混合无法按预期工作

node.js - request.on ('error' ) 和 response.on ('error' ) 有什么区别