Из-за ссылок на объекты Js я немного рассол.
У меня есть класс Js, который создает нового игрока. Класс имеет несколько разных переменных, строк и массива и т.д., А также некоторые функции для проверки определенных вещей, связанных с этими переменными.
Я делаю цикл while (заканчивается, когда один игрок объявлен мертвым), и после того, как цикл завершен, я хочу "перезагрузить" созданные экземпляры, чтобы я мог снова запустить цикл (вложенный цикл while).
например
function Player(name)
{
this.name = name;
this.hp = 100;
this.isnotdead = function()
{
return hp > 0;
}
}
var player1 = new Player('player1');
var player2 = new Player('player2');
while(war_is_happening)
{
while(player1.isnotdead || player2.isnotdead)
{
fight(player1, player2); // one of the players is killed
}
declareWinner(); // one player is a winner, lets fight again
resertPlayers() // I want to start the nearest while loop again, but with fresh variables for player 1 and player2
}
Надеюсь, это имеет смысл.
Раньше я использовал такие вещи, как JSON.parse(JSON.stringify(player1))
чтобы сделать копию объекта, но теперь у моего объекта (класса) есть методы внутри него, так что это не сработает.
function resertPlayers() {
player1 = new Player('player1');
player2 = new Player('player2');
}
Так как я прокомментировал, шаблон памяти является хорошим местом для начала, вы, по сути дела, делаете снимок своего объекта, когда он построен, и восстанавливайте его, когда захотите.
Вы можете это сделать так:
function Player(name)
{
this.name = name;
this.hp = 100;
var initialState = {hp:100};
this.isnotdead = function()
{
return hp > 0;
}
this.restore = function(){
this.hp = initialState.hp;
}
}
и вызовите player1.restore()
когда вы хотите сбросить player1.restore()
. Это предполагает наличие других свойств, которые вы НЕ хотите сбросить между играми. Если у вас их нет, то ответ @Igor - это очевидное (и лучшее) решение.
hp
но если у вас было много свойств, которые вы хотите сбросить, это можно сделать, не дублируя ничего