Ваш код возвращает значение из currentPlayer
, которое не обновляется при обновлении свойства исходного объекта. Итак, замыкание работает нормально, но фактом является то, что возвращаемое вами значение не указывает на обновленный объект, это просто новое значение, которое останется постоянным во время оператора return
.
Вам необходимо вернуть значение с помощью функции, как показано ниже.
let game = (() => {
let player1 = "Jim";
let player2 = "Mary";
let currentPlayer = player1;
const switchPlayers = () => { //This closure function is supposed to reassign the value of currentPlayer above. But it does not do it.
if (currentPlayer === player1) {
currentPlayer = player2;
} else {
currentPlayer = player1;
}
return currentPlayer;
};
const getCurrentPlayer = () => currentPlayer;
return {
currentPlayer,
switchPlayers,
getCurrentPlayer
};
})();
game.switchPlayers();
console.log(game.currentPlayer);
console.log(game.getCurrentPlayer());
ИЛИ Просто определите свойство currentPlayer
для this
указателя функции, а затем используйте его как тип (используя ключевое слово new
), как показано ниже.
function GameType() {
let player1 = "Jim";
let player2 = "Mary";
this.currentPlayer = player1;
this.switchPlayers = () => { //This closure function is supposed to reassign the value of currentPlayer above. But it does not do it.
if (this.currentPlayer === player1) {
this.currentPlayer = player2;
} else {
this.currentPlayer = player1;
}
return this.currentPlayer;
};
}
let game = new GameType();
console.log(game.currentPlayer);
game.switchPlayers();
console.log(game.currentPlayer);