函数内部的引用对象,模块导出

时间:2016-12-26 21:28:11

标签: javascript node.js

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"

2 个答案:

答案 0 :(得分:1)

这应该可以调用email方法:

const module1 = require('module1.js');
module1(a, b).email();

模块导出构造函数。您必须调用该构造函数,然后当您使用module1(a, b)调用该函数时,您将获得一个对其具有.email()方法的对象。

你显然是想做:

module1.user.email();

这有两个不同的问题。

  1. 您需要使用module1(a, b)调用构造函数。 module1只是一个在您的实现中没有属性的函数。要获取用户对象,您必须调用该函数。

  2. 返回对象上没有.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