1 Star 0 Fork 3

AlfaLee/大前端

forked from 高翔/大前端 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
发布订阅模式.html 2.44 KB
一键复制 编辑 原始数据 按行查看 历史
高翔 提交于 2021-07-27 11:55 . 完善
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>发布订阅模式</title>
</head>
<body>
<script type="text/javascript">
// var ab = {};
// ab.list = [];
// 增加订阅者
// ab.listen = function(key, fn) {
// if (!this.list[key]) {
// this.list[key] = []
// }
// this.list[key].push(fn)
// }
// // 发布消息
// ab.trigger = function() {
// let key = Array.prototype.shift.call(arguments);
// let fns = this.list[key];
// if (!fns || fns.length == 0) {
// return
// }
// let fn = null;
// for (let i = 0; i < fns.length; i++) {
// fn = fns[i];
// fn.apply(this, arguments);
// }
// }
// //取消订阅
// ab.remove = function(key, fn) {
// let fns = ab.list[key];
// if (!fns) {
// return
// }
// if (!fn) {
// fns.length = 0;
// return
// }
// for (let j = fns.length - 1; j >= 0; j--) {
// if (fns[j] === fn) {
// fns.splice(j, 1)
// }
// }
// }
// ab.listen('red', function() {
// console.log("颜色是:", arguments[0].color)
// console.log("尺寸是:", arguments[0].size)
// })
// ab.listen('black', black = function() {
// console.log("颜色是:", arguments[0].color)
// console.log("尺寸是:", arguments[0].size)
// })
// ab.trigger('red', {
// color: "red",
// size: 42
// });
// ab.trigger('black', {
// color: "black",
// size: 38
// });
// ab.remove('black', black)
// console.log(ab)
var Event = (function() {
var list = [],listen, trigger, remove;
//增加订阅
listen = function(key, fn) {
if (!this.list[key]) {
this.list[key] = []
}
this.list[key].push(fn)
};
// 发布消息
trigger = function() {
let key = Array.prototype.shift.call(arguments);
let fns = this.list[key];
if (!fns || fns.length == 0) {
return
}
let fn = null;
for (let i = 0; i < fns.length; i++) {
fn = fns[i];
fn.apply(this, arguments);
}
};
// 取消订阅
remove = function(key, fn) {
let fns = ab.list[key];
if (!fns) {
return
}
if (!fn) {
fns.length = 0;
return
}
for (let j = fns.length - 1; j >= 0; j--) {
if (fns[j] === fn) {
fns.splice(j, 1)
}
}
};
return {
listen,
trigger,
remove
}
})()
</script>
</body>
</html>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/alfalee_admin/big-front-end.git
[email protected]:alfalee_admin/big-front-end.git
alfalee_admin
big-front-end
大前端
master

搜索帮助