首页 新闻 会员 周边 捐助

vue 被莫名被调用的 Array 扩展函数

0
悬赏园豆:50 [待解决问题]

我希望在vue2+elementui+typescript的项目里为Array扩展一个group函数,使其可以完成类似以下方式的调用。它可以正常的被调用,我的问题是,在我申明代码编写完毕并没有任何调用的情况下。打开我的页面,点击页面任何地方或按下任何按键,都将会执行我的group函数,并且打印错误,不知何时调用,为何会被调用,Debug之后发现 this 指针并非Array对象,而是一个函数(似乎是我的keyFunction,似乎可以得知,并非是Array对象调用了group,而是直接调用了我的keyFunction,导致this指针指向了一个函数)。若是我主动调用,它又会正常执行我的我的group。我不明白此点击事件何时执行了我的 Array.group, 详情如下

点击页面会产生

点击按钮会出现的情况(@click.stop 并不能避免该情况)

// 调用代码
const data: Array<{ name: string }> = [{ name: 'name1' }, { name: 'name2' }, { name: 'name2' }, { name: 'name3' }, { name: 'name1' }, { name: 'name1' }, { name: 'name3' }]
  console.log(data.group(x => x.name, x => x))

我的声明是这样的
声明文件

// ArrayExtend.d.ts
interface Array<T> {
  group<K, TG>(keyFunction: (t: T) => K, valueFunction: (t: T) => TG): Map<K, TG[]>
}

定义文件

//ArrayUtils.ts
Array.prototype.group = function <T, K, TG>(keyFunction: (t: T) => K, valueFunction: (t: T) => TG): Map<K, TG[]> {
  const map = new Map<K, Array<TG>>()
  this.forEach(item => {
    const key = keyFunction(item)
    const value = valueFunction(item)
    const values = map.get(key) ? map.get(key) : []
    values!.push(value)
    map.set(key, (values as TG[]))
  })
  return map
}
哇_有只小远的主页 哇_有只小远 | 初学一级 | 园豆:158
提问于:2022-01-21 15:49
< >
分享
所有回答(1)
0

已解决 代码本身没有问题,后来在edge与chrome中分别测试,发现edge没有问题而chorome有问题。而它们都是chrome内核,便从浏览器插件开始入手,发现再禁用JetBrains IDE Support浏览器插件后不再出现该错误提示。至此问题解决,至于为何插件会引发该问题就不得而知了

哇_有只小远 | 园豆:158 (初学一级) | 2022-01-21 17:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册