Есть ли разница между WeakMap и закрытым членом класса в JavaScript ES6? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь выяснить, что отличается между определением локальных / частных свойств и методов внутри класса по сравнению с конструктором WeakMap?

является ли цель сокрытия их снаружи одинаковой или есть другая вещь, чтобы использовать их?

enter image description here

1 Ответ

1 голос
/ 07 мая 2019

Учитывая вашу текущую реализацию:

  • Ваша let x не очень полезна, потому что на нее можно ссылаться только в конструкторе.Его нельзя использовать ни в одном из методов-прототипов.С другой стороны, на WeakMap можно ссылаться где угодно.Это довольно большая разница.
  • На вашу WeakMap можно ссылаться где угодно.Это означает, что он на самом деле не обеспечивает никакой конфиденциальности;все, что имеет ссылку на экземпляр и WeakMap, может получить доступ к значению radius, которое вы хотели бы использовать в частном порядке.

Если вы хотите, чтобы WeakMap был должным образом закрытым, череззамыкания, вы можете использовать IIFE для определения класса, например:

const myClass = (() => {
  const weakMap = new WeakMap();
  return class Circle {
    // etc
})();

Таким образом, верхний уровень имеет ссылку только на myClass, а не на weakMap.

Я бы использовал ваш let x в конструкторе всякий раз, когда переменная всего необходима в конструкторе - не обязательно для ради сокрытия данных, но только потому, что она не имеетиспользовать за пределами конструктора.См. Почему это хорошая практика программирования для ограничения области действия?

Обратите внимание, что в настоящее время существует предложение для полей класса , которое, вероятно, в конечном итоге будет реализовано, включая синтаксис дляличные поля, например:

class Circle {
  constructor(radius) {
    this.#x = radius;
    // ...

Это позволит получить доступ к #x из любой точки Circle, но нигде больше.Это функционально эквивалентно реализации WeakMap.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...