1.建立一个模块
eg.Market.js
//---------------------------------------------------------------------------------------------------
function createMark(marketName){
this.marketName = marketName;
console.info('you create a market which name is '+this.marketName+'!!!');
function getMarketName (){
return this.marketName;
}
exports.createMark = createMark;
exports.getMarketName = getMarketName;
//---------------------------------------------------------------------------------------------------
eg. Main.js
//---------------------------------------------------------------------------------------------------
var mark = require('./Market.js');
mark.createMark('dapaer`s market');
console.info('mark`s name is ' + mark.getMarketName());
//---------------------------------------------------------------------------------------------------
通过exports去暴露模块的成员或方法(暴露公开的api)
有两种方式:
1.module.exports.xxx = 模块里面的某个接口
2.exports.xxx = 模块里面的某个接口
这两者的区别:
1.exports 是module.exports的引用指向同一个内存地址
2.require需要返回的是module.exports而不是exports,如果此时exports仍为module.exprots的引用则没有关系,如果不是则会报错。
--》不是的情况:eg.exports = function(){xxx}或者exports = {}//一个新的对象,则会将原来的引用关系破裂,此时若是暴露module.exports = function(){xxx}或者module.exports = {}//一个新对象,不会报错,因为返回的仍然是require需要的。
通过require去加载模块
eg. var market = require('./Market.js')//.代表当前目录下
这段代码表达用require加载Market.js这个模块,返回了module.exports暴露出来的所有方法到market这个对象上
补充:
所谓的引用是指指向同一个内存地址
eg. var personA = {Name:'TOM'};
var personB = personA;
此时personB是personA的引用
如果此时将personB的属性Name 修改personA同样也会修改因为他们指向同一个内存地址,若此时将personB = {Name:'Candy'},则此时personA不会被改变,因为已将personB重新赋值,personB不再是personA的引用了,这里可以解释上的exports和module.exports的关系。
最后运行
网友评论