第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何用Object實現(xiàn)Map數(shù)據(jù)結(jié)構(gòu)

如何用Object實現(xiàn)Map數(shù)據(jù)結(jié)構(gòu)

如題。map數(shù)據(jù)結(jié)構(gòu)和object有一個區(qū)別是Map可以將任意類型值作為key,例如對象,函數(shù)。請問用ES5的對象該如何實現(xiàn)?
查看完整描述

2 回答

?
明月笑刀無情

TA貢獻1828條經(jīng)驗 獲得超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對象新增一個函數(shù),這個函數(shù)返回的值就是我們當時設(shè)置的值。然而由于可能出現(xiàn)不同的map對象,用相同的對象作key值的情況,這里給每一個map對象加了一個count計數(shù)器,用來作為map對象的id,以此作為key對象查找的一個依據(jù)。

查看完整回答
反對 回復(fù) 2018-08-19
?
汪汪一只貓

TA貢獻1898條經(jīng)驗 獲得超8個贊

proxy getter

查看完整回答
反對 回復(fù) 2018-08-19
  • 2 回答
  • 0 關(guān)注
  • 778 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號