一、在组件的通信中 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中设计模式吗?动手实现一下单例模式?
单例模式是创建型设计模式的一种。是指一个类只能有一个实例,即使多次实例化该类,也只返回第一次实例化后的实例对象。