NodeJS – 如何在自执行函数中将构造函数分配给module.exports?
我试图在NodeJS中的一个自我执行的函数中分配一个构造函数。 我很确定它不工作,因为我的参数是一个variables指向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不是一个函数”的错误,因为我实际上并没有分配到module.exports,只是一个variables,它复制了它所指向的任何东西至。
(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);