eventproxy 代码中removeListener实现有误?
最近在看eventproxy的源码,看到removeListener函数的实现,似乎有问题,ep, 作者的本意有可能是给定一个eventname和一个具体的callback,在自身的callbacks的列表里寻找,若两个函数相同,则移除这个callback。但是js中函数是对象,即使两个函数相同也不会判断为相等
var a =function(){
console.log('a')
}
var b = function(){
console.log('a')
}
a==b //false
a===b //false
所以这个if永远也不可能为真。
3 回复
a === [a][0]
?
这个地方不管是 ep 还是官方的 eventemitter 都是这样实现的吧,甚至 jquery 也会有你说的这个问题。
在想要移除一个 callback 的时候,需要传入那个监听时候的 function 对象,而不只是功能相同的 function。要传同一个对象!
传入的是引用,而不是功能相同的两个函数,楼主举的例子是两个函数。