1.node.js对于commonjs的实现
1.node.js对commonjs的规范做了三个步骤
1.node只有执行到require函数才会加载和执行模块。
2.为了隐藏模块中的代码,nodejs执行模块时,会将模块中的所有代码放置到一个函数中执行,以保证不污染全局变量。
(function(){
//模块中的代码
})()
3.为了保证顺利的导出模块内容,nodejs做了以下处理
1.在模块开始执行前,初始化一个值module.exports = {}.
2.module.exports即模块的导出值.
3.为了方便开发者便捷的导出,nodejs在初始化完module.exports后,又声明了一个变量exports = module.exports.
(function(module){
module.exports = {};
var exports = module.exports;
//模块中的代码
return module.exports;
})()
2.练习
制作一个斗地主洗牌发牌的程序
划分模块:
- 工具模块,导出一个函数,用于将一个数组中的所有内容乱序排列
- 扑克牌构造函数(类)
- 属性
- 花色(1~4,♣、♥、♦、♠)
- 牌面(1~15,14小王,15大王)
- 方法
- toString:得到该扑克牌的字符串
- 属性
- 入口模块(入口文件)
- 创建54张扑克牌
- 洗牌
- 发牌
入口文件index.js
//index.js 入口
var pokers = []; //扑克牌的数组
var Poker = require("./poker") //导入扑克牌的构造函数
for(var j = 1;j <= 13;j ++){
for(var i = 1;i <= 4;i ++){
pokers.push(new Poker(i,j));
}
};
pokers.push(new Poker(null, 14), new Poker(null, 15));
var util = require('./util');//导入洗牌发牌功能
util.sortRandom(pokers);//洗牌
var player1 = pokers.slice(0, 18);//人数牌数
var player2 = pokers.slice(18, 36);
var player3 = pokers.slice(36);
util.print(player1);//发牌
util.print(player2);
util.print(player3);
poker.js 扑克牌的构造函数
//poker.js扑克牌的构造函数
function Poker(color,number){
this.number = number;
this.color = color;
};
Poker.prototype.createPoke = function(){
var str = '';
//花色:♣、♥、♦、♠
if (this.color === 1) {
str = "♣"
}
else if (this.color === 2) {
str = "♥";
}
else if (this.color === 3) {
str = "♦";
}
else {
str = "♠"
};
//牌面
if(this.number >= 2 && this.number <= 10){
str += this.number;
}else if(this.number == 1){
str += 'A';
}else if(this.number == 11){
str += 'J';
}
else if(this.number == 12){
str += 'Q';
}
else if(this.number == 13){
str += 'K';
}else if (this.number === 14) {
str = "joker";
}
else if (this.number === 15) {
str = "JOKER";
};
return str;
}
module.exports = Poker;
发牌洗牌 util.js
//util洗牌发牌
module.exports = {
sortRandom: function (arr) {//洗牌
arr.sort(function (a, b) {
return Math.random() - 0.5;
})
},
print: function (pokers) {//发牌
var str = "";
for (var i = 0; i < pokers.length; i++) {
var p = pokers[i];
str += p.createPoke() + " ";
}
console.log(str);
}
};
结果: