尝试创建一个小模块导出。我要求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
答案 0 :(得分:2)
你应该做这样的工作:
module.exports = {
app: {
myFunc : function () {
console.log('working');
}
}
};
然后你可以用它运行它:
var test = require('./js/test.js');
test.app.myFunc();
答案 1 :(得分:2)
在您的示例中,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'));
这是我能想到的所有选择。如果这仍然没有回答你的问题,那么如果你解释一下你想要做得更好的话会有所帮助。
答案 2 :(得分:0)
我不明白将代码复杂化的重点是什么,但是如果你想让它复杂化,你可以做到这一点
module.exports = {
app: (function () {
var myFunc = function (arg) {
return 'working '+arg;
}
return {myFunc: myFunc}
}())
};