node学习笔记(一)————global、模块系统、事件、buffer

global对象

浏览器中,全局对象是window。window对象上定义的任何内容都可以被全局访问。
node中有两个类似但却各自代表不同含义的对象:

  • global:和window一样,任何global对象上的属性都可以被全局访问到
  • process:所有全局执行上下文中的内容都在process中。浏览器中,只有一个window对象,node中,也只有一个process对象。举例来说,浏览器窗口名字是window.name,类似,node中进程名称是process.title

模块系统

js原生态是一个全局的世界,所有如setTimeout、document等这样在浏览器端使用的api,都是全局定义的。js语言标准中并未为模块独立定义专门的API。以往的通过script标签引入第三方模块时,会导致引入的多个模块对全局命名空间的污染及命名冲突问题。

node内置了很多实用的模块作为基础工具(如http,fs等),node摒弃了采用定义一堆全局变量的方式,转而引入一个简单却强大的模块系统,该模块系统有三个全局对象:require,module和exports。

  • 绝对模块:指node通过在其内部node_modules查找到的模块,或者node内置的如fs这样的模块。可以直接通过名字require这个模块,无须添加路径名:require("xxx")
  • 相对模块:将require指向与一个相对工作目录中的js文件。

        暴露API

要让模块暴露一个API成为require调用的返回值,就要依靠modole和exports。默认情况下,每个模块都会暴露出一个空对象,如果你想要在该对象上添加属性,那么简单实用exports即可:

let apiRootUrl="http://www.baidu.com";
exports.getRootUrl=function(){
    return apiRootUrl;
}

exports就是对module.exports的引用,在默认情况下是一个对象,要是在该对象上逐个添加属相无法满足需求,可以重写module.exports。


function Person(name){
    this.name=name;
}
Person.prototype.sayHi=function(){
    console.log("hi,我叫"+this.name)
}
module.exports=Person;

事件

node中基础API之一就是EventEmitter。无论在node还是浏览器中,大量代码都依赖于所监听或分发的事件。

node中暴露了EventEmitter API,该API定义了on,emit以及removeLIstener方法。它以process.EventEmitter形式暴露出来。

buffer

除了模块以外,node还弥补了语言另外一个不足之处,那就是对二进制数据的处理。

buffer是一个表示固定内存分配的全局对象(也就是说,要放到缓冲区中的字节数需要提前顶下),它就好比一个由八位字节元素组成的数组,可以有效地在js中表示二进制数据。

该功能一部分作用就是可以对数据编码转换。比如可以将一副用base64表示的图片将其作为二进制png图片形式写入文件中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值