nodejs -- require , exports , module

1. require , exports .

--------------------------

文件:

1) index.js

 1 //两种方式都可以:
 2 var forExports = require("./forExports");
 3 // var forExports = require("./forExports.js");
 4 var forExports2 = require("./forExports2.js");
 5 
 6 //下面两种方式都可以:
 7 // var data = require("./data.json");
 8 var data = require("./data");
 9 
10 forExports.say("tom", "i want to eat beef");
11 
12 forExports2.say("lucy", "i want to shop");
13 
14 console.log(data);

2)data.json

 1 {
 2     "name": "BeJson",
 3     "url": "http://www.bejson.com",
 4     "page": 88,
 5     "isNonProfit": true,
 6     "address": {
 7         "street": "科技园路.",
 8         "city": "江苏苏州",
 9         "country": "中国"
10     },
11     "links": [
12         {
13             "name": "Google",
14             "url": "http://www.google.com"
15         },
16         {
17             "name": "Baidu",
18             "url": "http://www.baidu.com"
19         },
20         {
21             "name": "SoSo",
22             "url": "http://www.SoSo.com"
23         }
24     ]
25 }

3)forExports.js

1 function say(who, what){
2     console.log(who + " 说: " + what+ "! [ from forExports.js ]");
3 }
4 
5 exports.say = say;

4)forExports2.js

1 exports.say = function(who, what){
2     console.log(who + " 说: " + what+ "! [from forExports2.js]");
3 };

 运行:

 ----------------------

分析:

  第一: 两个模块 都有 方法say.    并且 say 方法 都 赋值给了 本模块的导出对象 .(这两个导出对象是不影响的)

    

  

  第二: require引入 模块的时候,后缀可以省略 .   ./data.json  和 ./data 都可以.

    

   

  第三: exports导出对象 赋予的是一个方法.

  

   下载文件: 密码: hu3a 

 2. module

 

1)上面虽然被替换成一个函数, 但是 仍然可以构造函数使用 . 此时实例化 ,可以输出  hello world.

2)可以当做 普通函数进行使用

------------------------------------------------

代码:

1. index.js

 1 /**********require,exports的使用*************/
 2 
 3 //两种方式都可以:
 4 // var forExports = require("./forExports");
 5 // // var forExports = require("./forExports.js");
 6 // var forExports2 = require("./forExports2.js");
 7 
 8 //下面两种方式都可以:
 9 // var data = require("./data.json");
10 // var data = require("./data");
11 
12 // forExports.say("tom", "i want to eat beef");
13 
14 // forExports2.say("lucy", "i want to shop");
15 
16 // console.log(data);
17 
18 
19 
20 
21 /***********module使用:***************/
22 
23 //1-: 实名的构造函数
24 var Person = require('./forModule.js');
25 var lucy = new Person("lucy", 23, "shopping");
26 console.log(lucy);
27 lucy.like();
28 
29 //2-: 匿名的构造函数
30 var Person2 = require("./forModule2.js");
31 var liming = new Person2("liming", 20, "football");
32 liming.like();
33 
34 //3-: 一个普通的函数, 但是也是当做构造函数,必须实例化,才有输出:
35 var Person3 = require("./forModule3.js");
36 var jim = new Person3("jim", 16, "swimming");
37 
38 //4-: 一个普通的函数, 当做普通函数:
39 var Person4 = require("./forModule3.js");
40 //调用函数:
41 Person4("Jack", 30, "cooking");

 2. forModule.js  : 有名字的构造函数

1 function Person (name, age, action) {
2     this.name = name;
3     this.age = age;
4     this.like = function(){
5         console.log(name+ ",年龄:"+age+";喜欢[" +action+ "]");
6     };
7 }
8 
9 module.exports = Person;

3. forModule2.js 匿名的构造函数:

1 module.exports = function(name, age, action) {
2     this.name = name;
3     this.age = age;
4     this.like = function(){
5         console.log(name+ ",年龄:"+age+";喜欢[" +action+ "]");
6     };
7 };

 4. forModule3.js 一个普通的函数, 但是仍然 当做是 构造函数使用. 或者 当做普通函数使用.

1 module.exports = function(name, age, action) {
2     console.log(name+ ",年龄:"+age+";喜欢[" +action+ "]");
3 };

--------------------------------

运行:

-------------------------------------

分析:

对于 forModule3.js ,

1)尽管只是一个普通函数:

1 module.exports = function(name, age, action) {
2     console.log(name+ ",年龄:"+age+";喜欢[" +action+ "]");
3 };

但是,仍然是当做构造函数, 进行 实例化 ,才会有输出:

1 //3-: 一个普通的函数, 但是也是当做构造函数,必须实例化,才有输出:
2 var Person3 = require("./forModule3.js");
3 var jim = new Person3("jim", 16, "swimming");

控制台输出:

2)当做一个普通的函数. 此时 require引入的就是一个函数.

1 //4-: 一个普通的函数, 当做普通函数:
2 var Person4 = require("./forModule3.js");
3 //调用函数:
4 Person4("Jack", 30, "cooking");

控制台输出:

 ---------------------------------

参考链接:

      代码下载: 密码: tdjv

原文地址:https://www.cnblogs.com/cbza/p/7339975.html