Объект WeakMap представляет собой набор пар ключ/значение, в котором на ключи слабо ссылаются. Ключи должны быть объектами, а значения могут быть произвольными значениями.

Давайте поговорим о том, что у нас есть класс person и имя свойства.

Вот пример,

class Person {
   constructor(name) {
       this.name = name;
   }
}
let Person1 = new Person("John");
console.log(Person1); // Person { name: 'John' }
console.log(Person1.name); // John

Нам нужно иметь приватную переменную в Javascript, чтобы это имя не имело доступа извне.

Как мы можем это сделать?

Одним из решений было бы поставить подчеркивание, например,

class Person {
   constructor(name) {
       this._name = name;
   }
}
let Person1 = new Person("John");
console.log(Person1); // Person { name: 'John' }
console.log(Person1.name); // Undefined

Это приносит с собой вечную борьбу, чтобы предупредить всех, что подчеркивание нельзя изменить или коснуться.

Другим решением было бы использование типа данных Symbol(),

let s_name = Symbol();
class Person {
   constructor(name) {
       this[s_name] = name;
   }
}
let Person1 = new Person("John");
console.log(Person1); // Person { name: 'John' }
console.log(Person1.name); // Undefined

Проблема в том, что символы выставляются с помощью таких методов, как Object.getOwnPropertySymbols(),

let symbols = Object.getOwnPropertySymbols(Person1);
console.log(Person1[symbols[0]]); // John

Но самый простой вариант,

новая WeakMap([iterable]);

У этого объекта один аргумент (итерируемый)

итерируемый –> необязательно. Iterable — это массив или другой итерируемый объект, элементами которого являются пары "ключ-значение" (двухэлементные массивы). Каждая пара ключ-значение будет добавлена ​​в новую WeakMap. null рассматривается как неопределенный.

Итак, давайте создадим нашу WeakMap,

class Person {
   constructor(name) {
     let weakmap = new WeakMap();
     weakmap.set(this, { name: name });
   }
}
let Person1 = new Person("John");
console.log(Person1); // Person {}
console.log(Person1.name); // Undefined

Основные отличия от объекта Map:

  • WeakMap — это только наборы объектов.
  • Если на объект элемента не осталось никакой другой ссылки, он будет автоматически отправлен в сборщик мусора.
  • По предыдущей причине вы не можете перебирать объекты внутри WeakMap.
  • По предыдущей причине вы не можете знать размер объектов внутри WeakMap.
  • Вы можете использовать только .set(), get(), .has() и .delete(). методы с помощью WeakMap.

WeakMaps могут быть особенно полезными конструкциями при сопоставлении ключей с информацией о ключе, которая является ценной только в том случае, если ключ не подвергался сборке мусора.

Ссылки на другие мои работы вы можете найти на Medium и подписаться на меня здесь.







Я часто делюсь советами по программированию в моем Instagram, вы можете поздороваться со мной в моем Twitterили посмотреть, как я программирую в моем Гитхаб.

Большое спасибо и продолжайте кодировать!!!

Йоэль