let crop = {
list: {},
on(key, fn) { if(!this.list[key]) {
this.list[key] = [];
}
this.list[key].push(fn);
},
emit(key, ...payload) { let fns = this.list[key]; if(!fns || fns.length === 0) return;
fns.forEach(fn => { fn.apply(this, payload);
})
},
remove(key, fn) { let fns = this.list[key];
console.log(key);
fns = [];
}
}写发布订阅的时候遇到了个问题。我在调用crop.remove()的时候清空了fns 但是打印fns还是有数据的。fns.length = 0;这样是可以清除的。fns不是也指向了this.list[key]吗?下方有打印结果
4 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
fns.length = 0 ; 之所以可以清空 是因为 你的fns = this.list[key];
fns = []; 这样不会清空this.list[key] 你可以理解成 fns = 1 一个道理 ;你是在给fns这个变量重新赋值 跟this.list[key];没关系。
- 4 回答
- 0 关注
- 335 浏览
添加回答
举报
0/150
提交
取消