模块化开发------commonJS

安装nodejs

官网地址:https://nodejs.org/zh-cn/

浏览器

浏览器运行的是html页面,并加载页面中通过script元素引入的js

在这里插入图片描述

nodejs

nodejs直接运行某个js文件,该文件被称之为入口文件

在这里插入图片描述

nodejs遵循EcmaScript标准,但由于脱离了浏览器环境,因此:

  1. 你可以在nodejs中使用EcmaScript标准的任何语法或api,例如:循环、判断、数组、对象等
  2. 你不能在nodejs中使用浏览器的 web api,例如:dom对象、window对象、document对象等

由于大部分开发者是从浏览器端开发转向nodejs开发的,为了降低开发者的学习成本,nodejs中提供了一些和浏览器web api同样的对象或函数,例如:console、setTimeout、setInterval等

CommonJS

node.js对模块化的需求比浏览器端的更大
node.js是将commonJS作为模块化规范
一个模块就是js文件 实现一部分功能
模块两个核心要素:隐藏和暴露
隐藏是直接自身内部实现的,
暴露是对外使用的接口 

任何的正常的模块化的标准,默认隐藏模块所有的实现,通过语法和api调用来暴露接口
 
 模块导出,需要使用的该模块暴露的部分,隐藏的部分是永远无法使用的
 当通过某种语法和api去使用模块时,这个过程叫做模块导入

CommonJS 规范

commonJS使用exports导出模块,require导入模块
1.如果一个js文件中存在exports或者repuire,则这个js文件是个模块

Node.js 对 CommonJS的实现

首先找到模块路径,若能找到就会执行模块内文件
然后会把导出函数当做函数的返回
node.js是导入模块,是使用相对路径,必须以./  或者../开头

1.保证高效的执行,仅仅是加载必要模块。nodejs只有执行到require的函数才睡加载并执模块
2.隐藏函数执行,以保证不污染全局的变量
```
(()=>{
    //代码块
})
```
3.为保证模块顺利导出内容,nodejs做了处理
    在模块开始执行前,初始化一个 module.exports ={}
    module.exports即是模块的导出值
    为了方便导出nodejs初始化完module.exports后,就会新声明一个变量exports = module.exports

    导入模块常用写法 
    重新赋值

    module.exports="
    //模块
    "
    不能重新赋值
    exports = 模块


4.为了避免反复加载同一个模块,nodejs默认开球模块缓存,如果加载的模块以及被加载过了,则会自动使用之前导出的结果
    提高执行效率

#练习commonjs 模块化开发

  1. 工具模块,导出一个函数,用于将一个数组中的所有内容乱序排列
  2. 扑克牌构造函数(类)
    1. 属性
      1. 花色(1~4,♣、♥、♦、♠)
      2. 牌面(1~15,14小王,15大王)
    2. 方法
      1. toString:得到该扑克牌的字符串
  3. 入口模块(入口文件)
    1. 创建54张扑克牌
    2. 洗牌
    3. 发牌
//index。js 入口文件

var pokers = [];//扑克牌的数组
var Poker = require("./poker")//导入扑克牌的构造函数

for (let i = 1; i < 13; i++) {//循环牌面
    for (let j = 1; j < 4; j++) {//循环花色
        pokers.push(new Poker(j,i));
        
    }
    
    
} 

pokers.push(new Poker(null,14),new Poker(null,15))

for (let i = 0; i < pokers.length; i++) {
    const p =pokers[i];
    console.log(p.toString());
}

// 顺序打乱
let uitl = require("./util");
uitl.sortRandom(pokers);

for (const p of pokers) {
    console.log(p.toString());
}



var Play1 = pokers.slice(0,18);
var Play2 = pokers.slice(17,34);
var Play3 = pokers.slice(34,51);
var desk= pokers.slice(51)





console.log("玩家1:");
uitl.print(Play1);


console.log("玩家2:");
uitl.print(Play2);

console.log("玩家3:");
uitl.print(Play3);

console.log("桌面:");
uitl.print(desk);

util。js
module.exports = {

    /**
     * @description: 讲数组内容打乱
     * @param {type} arr
     * @return {type} 
     * @author: Ricardo
     */

    sortRandom: (arr) => {
        arr.sort((a, b) => {
            return Math.random() - 0.5;
        })
    },
    /**
     * @description: 打印扑克牌的数组
     * @param {type} pokers
     * @return {type} 
     * @author: Ricardo
     */
    print: (pokers) => {
        var str = "";
        for (let i = 0; i < pokers.length; i++) {
            const p = pokers[i];
            str += p.toString() + "   ";
        }
        console.log(str);

    }

}
pokers。js
function Poker(color,number) {  

    this.color= color;
    this.number = number;

}


Poker.prototype.toString =function(){
    var str = "";
    //1. 花色(1~4,♣、♥、♦、♠)
    //2. 牌面(1~15,14小王,15大王)
    if (this.color === 1) {
        str ="♣";
    } else if(this.color ===2) {
        str="♥";
    }else if(this.color ===3) {
        str="♦";
    }else if(this.color ===4) {
        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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值