跳到主要内容

· 阅读需 10 分钟
熊滔

本篇文章总结控制对象访问的相关 API。

Object.defineProperty

Object.defineProperty 可以对对象的属性进行配置,它接收如下参数:

  • obj:对象
  • prop:属性
  • descriptor:属性描述符

其中 descriptor 包括如下配置选项

  • value:属性的值
  • writable:属性是否可写,默认为 false
  • set:为属性设置值时会触发此方法,设置的新值会作为参数传入
  • get:访问此属性是会触发此方法
  • configurable:该属性是否可再次进行配置,默认为 false
  • enumerable:是否可遍历,默认为 false

其中 valuewritable 是一组,setget 是一组,二者不可同时使用。

· 阅读需 20 分钟
熊滔

EventEmitter 的使用

EventEmitter 为我们提供了事件订阅机制,通过引入 events 模块来使用它。

const {EventEmitter} = require("events");
const eventEmitter = new EventEmitter();

// 监听 data 事件
eventEmitter.on("data", () => {
console.log("data");
});

// 触发 data 事件
eventEmitter.emit("data");

上述代码我们使用 on 方法来为事件绑定回调函数,使用 emit 方法来触发一个事件。

· 阅读需 21 分钟
熊滔

引入 Stream

假设我们有这么一个需求,我们需要复制一个文件中的内容到另一个文件中,我们会写出以下代码

const fs = require('fs');
const path = require('path');

const copy = (source, target) => {
fs.readFile(path.resolve(source), (err, data) => {
if(err) {
throw new Error(err.toString());
return;
}
fs.writeFile(path.resolve(target), data, (err) => {
if(!err) {
console.log("复制成功!");
}
})
})
}

· 阅读需 11 分钟
熊滔

Buffer 是 Node.js 的内置类型,它是用来表示内存中一块区域的,它保存的是二进制数据,可以将它看做为一个二进制数组。

Buffer 可以用来表示图片、视频这样的二进制数据,另外我们从文件中读取到的也是 Buffer 类型的数据,从网络中接收的数据也是 Buffer 类型的数据,所以学习 Buffer 还是很有必要的。

Buffer 位于全局作用域中,所以不需要通过 require('buffer') 来引入 Buffer。

创建 Buffer 对象

alloc

我们可以通过 Buffer.alloc(size, [fill], [encoding]) 来分配一个 size 字节大小的内存,还可以接收两个可选参数

  • fill:使用 fill 来填充 Buffer 中的每一个字节
  • encoding:如果 fill 为字符串,那么使用 encoding 来对字符串进行编码为二进制

当不指定 fill 参数,默认为填充 0。

· 阅读需 14 分钟
熊滔

Node.js 是单线程的,但是它却可以应用在高并发场景,原因就是它的事件循环机制。所以本篇文章来介绍 Node.js 的事件循环机制。