이제 ES6 WeakMap 기능의 사용 사례를 배우기 시작했습니다. 나는 그것에 대해 많이 읽었지 만, 나는이 특별한 질문에 대한 답을 찾을 수 없었다.WeakMap.set 메서드를 사용하지 않고 JavaScript WeakMap 키/값 쌍의 값을 변경하면 단점이 있습니까?
재미 있고 실용적인 Node.js Minesweeper 게임을 구현하고 있습니다. MineBoard라는 클래스를 만들었습니다.이 클래스는 게임에 필요한 모든 데이터와 메서드를 저장합니다. 나는 _uncoveredCount (발견 된 사각형의 수)와 _winningCount (이길 필요가있는 사각형의 수)와 같은 일부 멤버가 사용자에게 접근하기 어려운 상태를 유지하기를 원합니다. 이 게임이 제작에 들어 가지 않더라도, 나는 아직도 그것을 바랄 수 없게하고 싶다.) 그리고 private 멤버를 알리는 _ 접두사의 명명 규칙만으로는 충분하지 않다.
이렇게하려면 - 위의 두 예제를 저장하는 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를 읽고 코드를 쉽게 이해할 수 있습니다.
감사합니다.
의견을 보내 주시면 감사하겠습니다. 의견을 보내 주셔서 감사합니다. –