全站限时优惠至少 8 折起

剧场模式
首页后端Nodejs轻松学 nodejs - 基础篇

轻松学 Node.js - 基础篇 #5 事件

求知小风 · 元婴发布于

https://nodejs.org/dist/latest-v9.x/docs/api/events.html

https://nodejs.org/dist/latest-v9.x/docs/api/util.html#util_util_inherits_constructor_superconstructor

var events = require('events');
var util = require('util');

var Person = function(name) {
    this.name = name
}

util.inherits(Person, events.EventEmitter);

var xiaoming = new Person('xiaoming');
var lili = new Person('lili');
var lucy = new Person('lucy');

var person = [xiaoming, lili, lucy];

person.forEach(function(person) {
    person.on('speak', function(message) {
        console.log(person.name + " said: " + message);
    })
})

xiaoming.emit('speak', 'hi');
lucy.emit('speak', 'I want a curry');

// var myEmitter = new events.EventEmitter();

// myEmitter.on('someEvent', function(message) {
//     console.log(message);
// })

// myEmitter.emit('someEvent', 'the event was emitted');
9 条回复
  • pyyzcwg2833 · 元婴
    pyyzcwg2833 · 元婴 #1

    最好用ES6哈哈哈

  • 求知小风 · 真仙

    实践课会用 es6

  • ByeWord · 合体
    ByeWord · 合体 #3

    let events = require('events');
    let utils = require('util');

    // let myEmitter = new events.EventEmitter();

    // myEmitter.on('connected',(message)=>{
    // console.log(message);
    // })
    //按监听器的注册顺序,同步地调用每个注册到名为 eventName 事件的监听器,并传入提供的参数。
    // myEmitter.emit('connected','你好世界')

    class Person extends events.EventEmitter {
    constructor(name){
    super();
    this.name = name;
    }
    }
    let lily = new Person('Lily');
    let lucy = new Person('Lucy');

    let peoples = [lily, lucy];
    peoples.forEach(people => {
    people.on('say',(message)=>{
    console.log(message,this);
    })
    });
    lily.emit('say','你好啊,世界');
    lucy.emit('say','欢迎,大千世界')

  • dechuangchang · 合体

    const EventEmitter = require('events');
    class MyEmitter extends EventEmitter {}

    const fun1= new MyEmitter();
    const fun2= new MyEmitter();
    const fun3= new MyEmitter();

    let arr = [fun1,fun2,fun3];
    arr.forEach((item)=>{
    item.on('event', msg => {
    console.log(msg);
    });
    })
    fun1.emit('event','fun1');
    fun2.emit('event','fun2');
    fun3.emit('event','fun3');

  • DoubleF · 元婴
    DoubleF · 元婴 #5

    这章我基本上看得一头雾水~

  • ll199312 · 元婴
    ll199312 · 元婴 #6

    讲的很棒

  • carrieguo · 元婴
    carrieguo · 元婴 #7

    const EventEmitter = require('events');

    class Person extends EventEmitter {
    constructor(name) {
    super();
    this.name = name;
    }
    }

    let xiaoming = new Person('xiaoming');
    let lili = new Person('lili');
    let lucy = new Person('lucy');

    let person = [xiaoming, lili, lucy];

    person.forEach(function(person) {
    person.on('speak', function(message) {
    console.log(person.name + "say" + message);
    })
    });

    xiaoming.emit('speak', 'hi');

  • Lyle101 · 元婴
    Lyle101 · 元婴 #8


    var events = require('events');
    // util是一个node核心工具库,包含很多功能
    var util = require('util');

    var Person = function(name) { // 定义一个Person类
    this.name = name
    }

    // Person 继承于 events.EventEmitter
    util.inherits(Person, events.EventEmitter);

    // 新建三个对象
    var xiaoming = new Person('xiaoming');
    var lili = new Person('lili');
    var lucy = new Person('lucy');

    var person = [xiaoming, lili, lucy];

    person.forEach(function(person) {
    // 给每个人绑定一个事件
    person.on('speak', function(message) {
    console.log(person.name + " said: " + message);
    })
    })

    // 触发事件:
    xiaoming.emit('speak', 'hi');
    lucy.emit('speak', 'I want a curry');

  • 知了知乐 · 元婴
    //nodejs中的一个工具库
    const util = require('util');
    //nodejs中的一个事件库
    const events = require('events');
    var someEvent=new events.EventEmitter();
    
    someEvent.on('someEvent',function(name){
        console.log(name);
    })
    someEvent.emit("someEvent","代码运行自动触发事件");
    
    
    //Person继承事件功能(采用的是Es6的写法)
    class Person extends events{
    
        //定义的一个方法
        writeName(data,name) {
            //this这里可以理解为就是Person对象
            this.emit('click', data+"   "+name);
        }
        //foreach中调用的
        everyPersonName(name) {
            this.emit('click',name);
        }
        //名字的set和get方法
        setName(name){
            this.name=name;
        }
        getName(){
            return this.name;
        }
    
    }
    const personOne=new Person();
    personOne.setName("zhangsan");
    const personTwo=new Person();
    personTwo.setName("lisi");
    
    var persons=[personOne,personTwo];
    persons.forEach(function(person){
        person.on('click',function(data){
            console.log(person.getName()+"  hi hi");
        })
    })
    personOne.everyPersonName(personOne.getName())
    personTwo.everyPersonName(personTwo.getName())
    
    const myPerson=new Person();
    //因为person这个对象继承的是events所以有on事件
    //Es6语法,箭头函数(data)=>{}
    myPerson.on('click', (data) => {
        console.log(`${data}`);
    });
    //传统语法function(){}
    myPerson.on('click',function(data){
        console.log(data);
    });
    myPerson.writeName("采用的是Es6的语法形式","zhangsan");
    
    

    结果:
    代码运行自动触发事件
    zhangsan hi hi
    lisi hi hi
    采用的是Es6的语法形式 zhangsan
    采用的是Es6的语法形式 zhangsan

加微信(qiuzhi99666)入群官方服务号
随机课程
React & Redux 实战 Reminder Pro 项目

React & Redux 实战 Reminder Pro 项目

5 个视频31 分钟初级

Pro¥ 59.00¥ 47.20

Redux已完结

学员(149)
皮卡丘 · 合体z8974188 · 大乘可爱帅 · 太乙caitengfei520 · 元婴招财加菲猫 · 大罗奥特曼🤖 · 元婴Q.Qiang · 元婴Treeman · 元婴ÖÓÛÒ · 元婴wangyinwei1 · 道祖maxmilia · 道祖Kakkkkk · 元婴
最新动态
皮卡丘 · 合体学习到了4:02
z8974188 · 大乘学习到了7:18
可爱帅 · 太乙学习到了7:26
caitengfei520 · 元婴学习到了7:00
招财加菲猫 · 大罗学习到了7:00
统计信息
    学员: 17287
    视频数量: 997
    帖子数量: 424

© 汕尾市求知科技有限公司 | 粤ICP备19038915号 | 关注我们 | 在线学员:119

Top