eventproxy 代码中removeListener实现有误?
发布于 8 年前 作者 Alexis374 3360 次浏览 来自 分享

最近在看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。要传同一个对象!

传入的是引用,而不是功能相同的两个函数,楼主举的例子是两个函数。

回到顶部