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 = 模塊里面的某個接口
這兩者的區(qū)別:
1.exports 是module.exports的引用指向同一個內(nèi)存地址
2.require需要返回的是module.exports而不是exports,如果此時exports仍為module.exprots的引用則沒有關(guān)系,如果不是則會報錯。
? ? ? ? ? ?--》不是的情況:eg.exports = function(){xxx}或者exports = {}//一個新的對象,則會將原來的引用關(guān)系破裂,此時若是暴露module.exports = function(){xxx}或者module.exports = {}//一個新對象,不會報錯,因為返回的仍然是require需要的。
通過require去加載模塊
eg. var market = require('./Market.js')//.代表當前目錄下
這段代碼表達用require加載Market.js這個模塊,返回了module.exports暴露出來的所有方法到market這個對象上
補充:
所謂的引用是指指向同一個內(nèi)存地址
eg. var personA = {Name:'TOM'};
? ? ? var personB = personA;
? ? ?此時personB是personA的引用
? ? ?如果此時將personB的屬性Name 修改personA同樣也會修改因為他們指向同一個內(nèi)存地址,若此時將personB = {Name:'Candy'},則此時personA不會被改變,因為已將personB重新賦值,personB不再是personA的引用了,這里可以解釋上的exports和module.exports的關(guān)系。
最后運行
