node——module.exports


module.exports

1.

在a.js中

var b=require('./b.js');
 console.log(b);

在b.js中

function add(x,y){
    return x+y;
}

var result=add(100,1000);

console.log(result);

執行a.js 

當加載一個模塊,默認被require()加載后,返回的是一個對象{}

2.

在b.js中

function add(x,y){
    return x+y;
}

var result=add(100,1000);

console.log(result);

//return "hello";會有問題
//給module.exports符什么值,加載b.js模塊的時候就會返回什么值
module.exports='hello world!';

執行a.js

給module.exports符什么值,加載b.js模塊的時候就會返回什么值
3.

b.js
function add(x,y){
    return x+y;
}

var result=add(100,1000);

console.log(result);

//return "hello";會有問題
//給module.exports符什么值,加載b.js模塊的時候就會返回什么值
//module.exports='hello world!';//字符
//module.exports=32233;//數字
module.exports=function(x){
    console.log(x);
};

a.js

 var b=require('./b.js');
 console.log(b);
 b('hahaha');

執行a.js

module.exports后面可以符字符串,數值,還有函數
4.
那么我們還可以這樣
b.js
function add(x,y){
    return x+y;
}

var result=add(100,1000);

console.log(result);

//return "hello";會有問題
//給module.exports符什么值,加載b.js模塊的時候就會返回什么值
//module.exports='hello world!';//字符
//module.exports=32233;//數字
/*module.exports=function(x){
    console.log(x);
};*/

module.exports.name='Jim';
module.exports.age=11;
module.exports.show=function(){
    console.log(this.name+this.age);
}

a.js

 var b=require('./b.js');
 console.log(b.name);
  console.log(b.age);
 console.log(b.show);
b.show();

執行a.js

b.js也可以返回出這樣的對象

總結:

所以,require用來加載模塊,module.exports用來暴露模塊

 

module.export與export的區別

a.js

 var b=require('./b.js');
 console.log(b.name);
  console.log(b.age);

 b.show();

b.js

module.exports.name='Bob';
exports.age=12;
exports.show=function(){
    console.log(this.name+this.age);
}

執行a.js

 

得到的結果與module.export的1結果相同,但是module.export與export之間還是有些差別的,我們來看下面的例子

a.js

var b=require('./b.js');
 console.log(b);
 console.log(b.name);
  console.log(b.age);

 b.show();
 b('hahaha');

b.js

module.exports.name='Bob';
exports.age=12;
exports.show=function(){
    console.log(this.name+this.age);
};
module.exports='Hello !';

執行a.js

可以看出最后暴露出的只有module.exports=“Hello !”,而exports的都沒有暴露出來

原因:

因為module.exports和exports相當於一個棧里的兩個變量,module.exports先指向堆里的一個對象,給對里添加了一個name屬性

 

exports會和module.exports指向同一個對象,添加屬性

 

之后如果又對module.export賦值:module.exports=‘Hello !’;,這個時候module.exports會指向堆里的一個新的地方

 

 

 exports就沒有和module.exports在同一個對象里了,而會返回的值會是module.exports的值,所以exports不會暴露出來

 再修改一下b.js

module.exports.name='Bob';
exports.age=12;
exports.show=function(){
    console.log(this.name+this.age);
};
exports='Hello !';

 

 

可以看出,最終返回的還是module.exports

exports存在因為它是一個快捷方式,是為了我們使用更方便

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM