参考B站视频:www.bilibili.com/video/BV1o4…
1、发布订阅
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<button id="btn" onclick="send">点我发布</button>
</body>
</html>
<script>
function Events() {
this.callbacks = [];
this.results = [];
}
Events.prototype.on = function(callback) {
this.callbacks.push(callback);
}; //订阅
Events.prototype.emit = function(data) {
this.results.push(data);
this.callbacks.forEach((i) => i(this.results));
}; //发布
let e = new Events();
e.on(function(data) {
console.log(data);
});
console.log(e);
let btn = document.getElementById("btn");
btn.onclick = function() {
e.emit("郭丹丹");
};
</script>
(1)订阅的时候,是先定好我需要做什么,传进去一个回调函数,然后这个订阅的函数会将我们传入的这个回调函数,放在一个数组里面,这个数组存放着我们的所有的订阅的事件;
(2)发布:当我们发布的时候我们需要传入我们要发布的消息,这个消息也是要被存放到一个结果的数组里面,因为可能是发布多个,然后当我们发布的时候,我们需要将所有订阅的事件都执行,然后向他们传入所有的我们的数据;