js8

一、在组件的通信中 EventBus 非常经典,你能手写实现下 EventBus 么?

class EventBus {
    constructor() {
        this.bus = {};
    }
    on(name, callback) {
        let cbs = this.bus[name];
        if(!cbs) {
            this.bus[name] = [callback];
        } else {
            cbs.push(callback);
        }
    }
    emit(name, ...args) {
        const cbs = this.bus[name] || [];
        cbs.forEach(cb => cb(...args));
    }
}

二、请介绍一下装饰者模式,并实现?

一种动态地往一个类中添加新的行为的设计模式。同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

const Person = {
    walk () {
        console.log('Is walking.');
    }
}
const walk = Person.walk;

Person.walk = function() {
    walk();
    console.log('Is talking.');
}

Person.walk(); // Is walking. Is talking.

三、了解js中设计模式吗?动手实现一下单例模式?

单例模式是创建型设计模式的一种。是指一个类只能有一个实例,即使多次实例化该类,也只返回第一次实例化后的实例对象。

JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。