module1.js
module.exports = function (input, input2) {
var user = {
email: function () {
return "exp";
}
}
return user;
}
modulegetter.js
var module1 = require('.../module1.js'); //correct path.
console.log(module1.user.email());
目标:我想引用导出函数中用户var内部的email函数,该怎么做?
我现在拥有的代码不起作用,我运行它并得到:
"Cannot read property 'email' of undefined"
答案 0 :(得分:1)
这应该可以调用email
方法:
const module1 = require('module1.js');
module1(a, b).email();
模块导出构造函数。您必须调用该构造函数,然后当您使用module1(a, b)
调用该函数时,您将获得一个对其具有.email()
方法的对象。
你显然是想做:
module1.user.email();
这有两个不同的问题。
您需要使用module1(a, b)
调用构造函数。 module1
只是一个在您的实现中没有属性的函数。要获取用户对象,您必须调用该函数。
返回对象上没有.user
属性。调用构造函数的返回值是整个用户对象,因此您只需引用直接引用.email()
方法。
答案 1 :(得分:0)
导出功能是' 高级'使用的
module.exports
系统。想一想:
1
简单模块导出文字值[ easy peasy ]:
// file1.js
module.exports = 12;
// file2.js
var x = require('file1.js');
console.log(x); // 12
2
模块导出函数[在调用之前不执行任何操作]:
// file3.js
module.exports = function () {
console.log('somebody run me');
}
// file4.js
var x = require('file3.js');
console.log(x); // oops a [function]
// ... but
console.log(x()); // yay; somebody run me
3
模块导出调用的函数[更容易为最终用户]:
// file5.js
module.exports = function () {
console.log('somebody run me, now');
}();
// file5.js
var x = require('file5.js');
console.log(x); // somebody run me, now
4
最后,一个模块导出一个可调用的函数,需要 参数[更复杂,但更灵活]:
// file6.js
module.exports function (foo) {
return "foo-" + foo;
};
// file7.js
var x = require('file6.js');
var result = x('something');
console.log(result); // foo-something