Я только начинаю изучать прецеденты для функции ES6 WeakMap. Я много читал об этом, но я не смог найти ответ на этот конкретный вопрос.Есть ли недостатки в изменении значения пары JavaScript/WeakMap JavaScript без использования метода WeakMap.set?
Я реализую игру Node.js Minesweeper для терминала - просто для удовольствия и практики. Я создал класс под названием MineBoard, который сохранит все необходимые данные и методы для игры. Я хочу, чтобы некоторые участники, такие как _uncoveredCount (количество открытых квадратов) и _winningCount (количество квадратов, открытых для победы), оставались недоступными для пользователя. Хотя эта игра не собирается в производство, мне все равно понравится, что она не подлежит обсуждению;) - и соглашение об именовании префикса для сигнализации частных членов недостаточно.
Для этого я внедрил WeakMap для хранения двух приведенных выше примеров и других частных членов.
СПОСОБ 1:
let _mineBoardPrivateData = new WeakMap();
class MineBoard {
constructor(size, difficulty) {
this.size = size || 10;
this.difficulty = difficulty || 1;
_mineBoardPrivateData.set(this, {});
_mineBoardPrivateData.get(this).winningCount = someMethodForDeterminingCount();
_mineBoardPrivateData.get(this).isGameOver = false;
_mineBoardPrivateData.get(this).uncoveredCount = 0;
//more code
}
generateNewBoard() {
//code
}
uncoverSquare() {
//more code
_mineBoardPrivateData.get(this).uncoveredCount++;
}
//more code
}
Это гораздо проще для меня, чтобы сделать это таким образом выше - а также намного легче на глазах. Однако большинство примеров реализации WeakMap, которые я видел, соответствуют стилю ниже.
МЕТОД 2:
let _winningCount = new WeakMap();
let _isGameOver = new WeakMap();
let _uncoveredCount = new WeakMap();
//more instantiations of WeakMap here
class MineBoard {
constructor(size, difficulty) {
this.size = size || 10;
this.difficulty = difficulty || 1;
_winningCount.set(this, someMethodForDeterminingWinningCount());
_isGameOver.set(this, false);
_uncoveredCount.set(this, 0);
//more private data assignment here
}
generateNewBoard() {
//code
}
uncoverSquare() {
//more code
_uncoveredCount.set(this, _uncoveredCount.get(this) + 1);
}
//more code
}
Так что мой вопрос - есть ли какие недостатки использования метода 1, что я не вижу? Это упрощает работу с более простым решением, а IMO - для чтения и выполнения кода.
Спасибо!
Ваше рассуждение имеет смысл для меня - спасибо за отзыв! –