2 回答
TA贡献1828条经验 获得超4个赞
function reDefineValueOf(key) {
const private = {};
const baseValueOf = key.valueOf;
function valueOf(n) {
if (arguments.length > 0) {
if (!(n in private)) {
private[n] = {};
}
return private[n];
}
return baseValueOf.apply(this, arguments)
}
Object.defineProperty(key, 'valueOf', {
value: valueOf,
configurable: true,
writable: true,
enumerable: false
})
}
function map() {
//通过count来解决,不同map对象,用相同对象作key的情况
const count = map.count++;
function getKey(key) {
if (key.valueOf.length !== 0) {
return key.valueOf(count)
}
reDefineValueOf(key)
return key.valueOf(count);
}
this.get = function (key) {
return getKey(key).value;
}
this.set = function (key, value) {
getKey(key).value = value;
}
}
map.count = 0;
var c = { c: 1 }
var a = new map();
var b = new map();
a.set(c, 'a')
b.set(c, 'b')
console.log(a.get(c));
console.log(b.get(c));
核心思想是,既然key是对象,那么就给key对象新增一个函数,这个函数返回的值就是我们当时设置的值。然而由于可能出现不同的map对象,用相同的对象作key值的情况,这里给每一个map对象加了一个count计数器,用来作为map对象的id,以此作为key对象查找的一个依据。
- 2 回答
- 0 关注
- 735 浏览
添加回答
举报