Node.js第三天

一、event事件:又称为发布订阅者和观察者

进过一天的学习,总结为以下几点

1. 获取事件模块 

1 var events = require("events").EventEmitter;//旧版的写法
2 var events = require("events");
3 //注意,这里使用监听事件还要用到util模块
4 var util = require("util");
5 //再给事件的监听者继承继承event的原型,下面的例子中会有介绍

2.可以设置监听者最大个数

goddess.setMaxListeners(10);//这里假设一个事件的发布者为goddess

3.绑定监听事件

//第一种绑定方式
goddess.on("ele",function() {
    console.log("我想吃芒果");
});
//第二种绑定方式
goddess.addListener("ele"), function() {
    console.log("我想吃芒果班戟");
});
//第三种绑定方式
goddess.prependListener("ele",function() {
    console.log("我想吃芒果干");
});

(1)还可以绑定一次事件,只会触发一次

goddess.once("run", function() {
    console.log("我去运动减肥");
});

4.发送事件(事件触发)

goddess.emit("ele");
goddess.emit("run");

运行之后出现以下效果:

    

5.移除事件,移除事件要在发送之前移除哦,不然发送的时候原来的事件还在的哦

//移除单个事件,移除事件要和添加时一致哦
goddess.removeListener("ele",function(){});
//移除多个同一名字的事件
goddess.removeAllListeners("ele");
//移除所有的事件
goddess.removeAllListeners();

接下来举一个🌰 :

一个女神,她告诉男孩们她肚子饿了,男孩们知道之后一些列的反应

1.获取事件模块(因为要用到原型的继承所以这里还引入了util模块)

2.创建两个类

3.给事件的发布者添加监听事件

4.发送事件

 1 var events = require("events");
 2 var util = require("util");
 3 
 4 //创建事件的发布者以及事件的观察者
 5 function Girl() {
 6 //    假设女神饿了
 7 }
 8 
 9 function Boy(name, response) {
10     this.name = name;
11     this.response = response;
12 }
13 
14 util.inherits(Girl,events);//继承来自于events原型方法
15 var goddess = new Girl();
16 
17 var boy1 = new Boy("备胎1",function() {
18     console.log("点饿了么");
19 });
20 var boy2 = new Boy("备胎2",function() {
21     console.log("上美团点外卖");
22 });
23 var boy3 = new Boy("备胎3",function() {
24     console.log("带你去吃西餐");
25 });
26 
27 //设置监听者最大个数
28 goddess.setMaxListeners(10);
29 
30 //只是绑定监听着
31 goddess.on("ele",boy1.response);
32 goddess.addListener("ele",boy2.response);
33 goddess.prependListener("ele",boy2.response);
34 goddess.on("ele",function() {
35     console.log("天猫超市来一箱");
36 });
37 
38 //once 绑定的事件只会触发一次,也就是只能emit一次,如果有多个die的emit只有第一个起作用哦,后面的都无效
39 goddess.once("die",function() {
40     console.log("女神死了");
41 });
42 
43 //移除事件(单个事件)
44 goddess.removeListener("ele",boy2.response);
45 
46 //移除所有事件
47 // goddess.removeAllListeners();
48 
49 //移除名字为ele的所有事件
50 // goddess.removeAllListeners("ele");
51 
52 //发送事件(事件触发)
53 goddess.emit("ele");
54 goddess.emit("die");

执行结果如下:

  

二、buffer:缓存区,暂时存放在内存里的一段数据

1.出现的原因:javascript本身是二进制的传输,只有字符串,为了保存和处理二进制数据

2.buffer是数组的形式,数组中的每一项都是以16进制展示的八位字节数

3.buffer是一个类,它能实例出一个全局对象,而且不需要引入

4.buffer的每一位的取值范围是0~255

//直接创建,由系统自动生成
var buffer = new Buffer(12);//参数为number,表示buffer的长度,值由系统生成

//填充值
buff.fill(225,3,6);
//从第4个数开始到第6个数为 ff 

//通过数组创建
var buffer2 = new Buffer([1,34,074,0xa6]);
console.log(buffer2);
//输出 01 22 3c a6

//可以将字符串转换为16进制数
var buffer3 = new Buffer("今天天气很好");
console.log(buffer3);
//输出  e4 bb 8a e5 a4 a9 e5 a4 a9 e6 b0 94 e5 be 88 e5 a5 bd

//concat进行数据拼接,转换成字符串,但是占用的内存高
Buffer.concat([拼接数组1,拼接数组2]).toString();

//推荐使用StringDecoder
var StringDecoder = require("string_decode").StringDecoder;
var decoder = new StringDecoder();
console.log(decoder.write(buffer));
console.log(decoder.write(buffer));
//将第一个和第二个buffer拼接起来

 

posted @ 2017-03-16 22:42  萩萩萩  阅读(142)  评论(0编辑  收藏  举报