6

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;

これが私が使用したいコードスタイルの例ですが、実際にはmodule.exportsに割り当てていないため、「TypeError:オブジェクトは関数ではありません」というエラーが発生します。に。

(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);

上記の自己実行形式を使用して、モジュールにコンストラクターをエクスポートさせる方法はありますか?

4

1 に答える 1

9

2 番目の例では、単にtemplateEngineパラメーターを上書きしているだけで、何の効果もありません。

最初の例と同じ結果を得るには、次のようにします。

IIFEmoduleに渡します。

(function(module) {

})(module);

それにプロパティを割り当てます。

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

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

})(module);
于 2015-02-13T19:51:21.490 に答える