Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.229.82] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте робята
для тех кто не понял как реализуется WeakMap, смотрите анализ от Гения: усеченный, ясный, гениальный const MyWeakMap = (() => { 'use strict'; const _uid = Symbol(); return class { constructor(){ this.version = "1.0.0"; } get(key){ return key[_uid]; } set(key, value){ key[_uid] = value; } has(key){ return (typeof key[_uid] !== "undefined") ? true : false; } ["delete"](key){ return delete key[_uid]; } }; })(); // test let map = new MyWeakMap(); let key1 = {}, value1 = { a: 100 }; map.set(key1, value1); map.has(key1); // true map.get(key1); // {a:100} value1 = null; key1 = null; // key1/value1 is GC-able Потом ещё выложу один анализ |
Сообщ.
#2
,
|
|
|
Записывать значение в ключ - это сверхгениально, ага
Осталось гениальность довести до совершенства и заменить всякие has(key){ return (typeof key[_uid] !== "undefined") ? true : false; } на has(key) { return key[_uid] !== 'undefined'; } // или has(key) { return !!key[_uid]; } |
Сообщ.
#3
,
|
|
|
Цитата Serafim @ Записывать значение в ключ - это сверхгениально, ага Осталось гениальность довести до совершенства и заменить всякие has(key){ return (typeof key[_uid] !== "undefined") ? true : false; } на has(key) { return key[_uid] !== 'undefined'; } // или has(key) { return !!key[_uid]; } вот еще гениальное решение! const MyWeakMap = (() => { "use strict"; const definePrivate = (key) => { var ret = {}; Object.defineProperty(key, "valueOf", { value() { return ret; } }); return ret; } const getPrivate = (key) => { var ret = key.valueOf(); return (ret !== key) ? ret : definePrivate(key); }; return class MyWeakMap { constructor(){ this.version = '2.0.0'; } get(key) { return getPrivate(key).value; } set(key, value) { getPrivate(key).value = value; } has(key) { return 'value' in getPrivate(key); } ["delete"](key) { return delete getPrivate(key).value; } } })(); я крут да? ну признайся |