未定义不是函数:模块导出
Undefined is not a function: Module export
尝试创建一个小模块导出。我要求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}
}())
};
相关文章:
- Nodejs模块函数返回未定义的,而不是异步的
- 从模块函数返回未定义的对象
- jQuery模块函数意外返回'未捕获的类型错误'
- 将模块函数传递给另一个文件中的函数
- 从视图调用异步加载模块函数
- RequireJS:模块函数是每次导入模块时执行还是第一次执行
- 从模块函数显式访问模块 var 以揭示模块模式
- Typescript-不同文件中的模块函数引用-“;找不到符号“;
- 两个异步模块函数异步工作
- node.js导出模块函数
- Node.js:使用Bluebird将模块函数从回调转换为承诺
- 如何访问require.js模块's函数
- 调用另一个模块函数作为回调[ES6]
- Node.js模块函数的访问参数
- 剑道MVVM绑定到自执行匿名模块函数
- 如何重写模块函数'
- 如何有选择地导入ES2015模块函数,但要使用命名空间
- 我应该把包依赖传递给模块函数,还是只在模块文件中需要它们?
- Node.js将变量传递给模块vs将变量传递给每个模块函数
- 未捕获的错误:不匹配的匿名定义()模块:函数定义(name, global)