未定义不是函数:模块导出

Undefined is not a function: Module export

本文关键字:模块 函数 未定义      更新时间:2023-09-26

尝试创建一个小模块导出。我要求var myFunc() = function()...是完整的,我试图制作模块的代码非常复杂。

这是文件js/test.js:

module.exports = {
    app: function () {
        var myFunc = function (arg) {
            return 'working '+arg;
        }
    }
};    

使用运行

var test = require('./js/test.js');
console.log(test.app.myFunc('now'));

错误如下:

test.app.myFunc();
         ^
TypeError: undefined is not a function

在您的示例中,myFunc是函数app的局部变量,而不是成员,因此它不能作为app.myFunc使用(您不能以这种方式访问函数的局部成员。或者根本不能访问)。如果module.exports.app绝对必须是一个函数,而不是一个对象,你可以这样做:

module.exports = {
    app: function() {
    }
};
module.exports.app.myFunc = function(arg) {
    return 'working '+arg;
};

然而,对于app来说,简单地作为一个文字对象会更明智:

module.exports = {
    app: {
        myFunc: function(arg) {
            return 'working '+arg;
        }
    }
};

或者,如果您需要myFunc依赖于app内部的变量(尽管这不是必要的,因为模块已经意味着封装):

module.exports = {
    app: (function() {
        var _internal = 'working ';
        return {
            myFunc: function(arg) {
                return _internal+arg;
            }
        };
    })()
};

如果您需要myFunc依赖于传递给app:的参数

module.exports = {
    app: (function(passed) {
        return {
            myFunc: function(arg) {
                return passed+arg;
            }
        };
    })()
};

然后你用它作为

var test = require('./js/test.js');
console.log(test.app('working ').myFunc('now'));

这是我能想到的所有选择。如果这仍然不能回答你的问题,如果你能更好地解释你正在努力实现的目标,那将有所帮助。

您应该这样做才能工作:

module.exports = {
    app: {
        myFunc : function () {
            console.log('working');
        }
    }
}; 

然后你可以用这个运行它:

var test = require('./js/test.js');
test.app.myFunc();

我不明白把代码复杂化这么多有什么意义,但如果你想进一步复杂化,你可以做这个

module.exports = {
    app: (function () {
        var myFunc = function (arg) {
            return 'working '+arg;
        }
        return {myFunc: myFunc}
    }())
};