复制就则可实现、实测有效
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
let event = {
list: {},
on(key, fn){
if(!this.list[key]){
this.list[key] = [];
}
this.list[key].push(fn);
},
emit() {
let args = [];
for(let i = 0 ; i < arguments.length; i++){
args.push(arguments[i]);
};
const key = args.shift();
const fns = this.list[key];
if(!fns||fns.length === 0){
return false;
}
fns.forEach(item => {
item.apply(this, args);
})
},
remove(key, fn){
let fns = this.list[key];
if(!fns)return false;
if(!fn){
fns && (fns.length = 0);
} else {
fns.forEach((callBack, index) => {
if(callBack === fn){
fns.splice(index, 1);
}
})
}
}
};
let funcJob = (job, money) => {
console.log(`您的职业是 ${job}`);
console.log(`期待薪资是 ${money}`);
};
event.on('jobs', funcJob);
event.emit('jobs', '前端', 12000);
function test() {
console.log('冲冲冲');
}
function deleteThing() {
console.log('111111');
}
event.on('pet', data => {
console.log('接收数据');
console.log(data);
});
event.on('pet', test);
event.on('pet', deleteThing);
event.remove('pet', deleteThing);
event.emit('pet', ['二哈', '波斯猫']);
</script>
</body>
</html>