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 關注
- 772 瀏覽
添加回答
舉報