commonjs规范

commonjs即模块化,需要理解的有2个主要的地方:

1.module.exports

2.require()

我们一般用module.exports开放模块,在需要引入的地方用require()引入这个模块举例说明:

新建dog.js文件,并写入以下代码:

let dog = {

     name:'大黄',

     id:9527,

     dosomething:function(str){

         return this.name+'正在玩'+str;

     }

}

module.exports = dog;

这样,我们就制作完成了一个js模块,并将整个模块(dog)开放了出来

如果我们需要引用这个dog.js模块,只需要用require()方法引入即可:

我们再新建一个home.js文件,把dog.js引入进来,代码如下:

let  homedog = require(./dog.js)

let id = homedog.id,

name = homedog.name;

console.log(id)

console.log(name)

我们打开命令窗口输入(需要提前安装node):node home.js ,可以看到打印出来:

9527

大黄

能看到打印的结果,说明引入成功

另外,有2点注意:

1.模块也可不完全开放,部分开放也是可以的

比如:在dog.js中,我们之前是把整个dog对象开放出去的(module.exports = dog;),这次我们只开放它的一个方法,改成:

module.exports = dog.dosomething;

那么,在home.js中我们也要修改下引入

let dosomething = require(./dog.js)

let play = dosomething('皮球')

console.log(play)

得到的打印结果是:undefind正在玩皮球

这里扩展下:

这个结果说明部分引用是没有问题的。但bug还是有的,undefind怎么来的呢?

说下原因:这是个常见的this转移问题,模块化的引用,我们是把dog.js里,对象dog的dosomething方法的引用地址赋给了home.js的dosomething属性,因此,在调用的时候,this.name找不到了(this指向的是window),变成了undefind.

2.模块全部开放,引入时可以部分引入。

比如:dog.js里我们还是把整个dog对象开放出来(module.exports = dog;),但在home.js中,我们只引用它的方法,就可以这样写:

let dosomething = require(./dog.js).dosomething;

这样,就做到了完全开放模块,按需引入模块的作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值