EventEmitter icon indicating copy to clipboard operation
EventEmitter copied to clipboard

重复添加事件问题

Open shimuash opened this issue 8 years ago • 1 comments

您好,我发现那个indexOf有点问题,不能避免重复添加事件

function indexOf(array, item) {
        if (array.indexOf) {
            return array.indexOf(item);
        } else {
            var result = -1;
            for (var i = 0, len = array.length; i < len; i++) {
                if (array[i] === item) {
                    result = i;
                    break;
                }
            }
            return result;
        }
    }

在添加事件的时候,使用indexOf(listeners, listener) === -1判断listeners没有listener才添加,但是listener可能为object,也可能为function,所以我修改为以下

function indexOf (array, item) {
    var result = -1
    item = typeof item === 'object' 
      ? item.listener 
      : item
    
    for (var i = 0, len = array.length; i < len; i++) {
      if (array[i].listener === item) {
        result = i
        break
      }
    }

    return result
  }

不知道分析的对不对?

shimuash avatar Dec 15 '17 04:12 shimuash

@xxxgitone 啊,确实有问题,感谢指出~ o( ̄▽ ̄)d 欢迎发起一个 Pull requrest ,我会 merge 的~

mqyqingfeng avatar Dec 15 '17 04:12 mqyqingfeng