CNode

eventproxy 代码中removeListener实现有误?

分享
AAlexis374发布于10 年前最后回复10 年前3 回复4617 浏览0 收藏

最近在看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)

E
elrrrrrrr#1·10 年前
a === [a][0]

?

A
alsotang#2·10 年前

这个地方不管是 ep 还是官方的 eventemitter 都是这样实现的吧,甚至 jquery 也会有你说的这个问题。

在想要移除一个 callback 的时候,需要传入那个监听时候的 function 对象,而不只是功能相同的 function。要传同一个对象!

Z
zzbo#3·10 年前

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

参与回复
登录后即可参与回复。登录