如何在JavaScript自定义Map类中使用内置Map?
解决自定义Map类与内置Map的递归冲突问题
问题原因
你自定义的类名和内置Map重名了,在类内部执行new Map()时,JS会优先引用你自己定义的Map类,导致无限递归调用。
解决方案
方案1:明确引用内置Map构造函数
直接使用全局对象上的Map来区分自定义类和内置类型,推荐用globalThis(兼容浏览器、Node.js等所有环境):
class Map { constructor() { // 用globalThis.Map指定调用原生内置Map this.myMap = new globalThis.Map(); } }
方案2:用对象存储浮点数键(替代内置Map)
对象的键会被自动转为字符串,浮点数转成字符串后仍能保持唯一性,完全可以用来当键使用。你可以封装简单的set/get方法来操作:
class Map { constructor() { this.myMap = {}; } // 存入键值对 set(key, value) { this.myMap[String(key)] = value; } // 获取值 get(key) { return this.myMap[String(key)]; } }
比如调用set(0.3, 'foo')后,用get(0.3)就能正确拿到'foo',不会因为浮点数的问题出现键冲突。
内容的提问来源于stack exchange,提问作者Will He
相关产品推荐
相关产品推荐

