Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用类对象循环时,随后重置_Javascript - Fatal编程技术网

Javascript 使用类对象循环时,随后重置

Javascript 使用类对象循环时,随后重置,javascript,Javascript,由于Js引用对象,我有点为难 我有一个Js“类”来创建一个新的玩家。这个类有几个不同的变量、字符串和数组等,还有一些函数用于检查与这些变量有关的某些事情 我正在做一个while循环(当一个玩家被宣告死亡时结束),循环完成后,我想“重置”实例化的类,以便再次运行循环(嵌套的while循环) e、 g 希望这是有意义的 以前我使用了类似于JSON.parse(JSON.stringify(player1))的东西来制作对象的副本,但现在我的对象(类)中有一些方法,所以这不起作用。所以正如我所评论的,

由于Js引用对象,我有点为难

我有一个Js“类”来创建一个新的玩家。这个类有几个不同的变量、字符串和数组等,还有一些函数用于检查与这些变量有关的某些事情

我正在做一个while循环(当一个玩家被宣告死亡时结束),循环完成后,我想“重置”实例化的类,以便再次运行循环(嵌套的while循环)

e、 g

希望这是有意义的

以前我使用了类似于
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()
。这假设在游戏之间存在不希望重置的其他属性。如果你没有,那么@Igor的答案是显而易见的(也是最好的)解决方案。

展示玩家的类定义。你可能想看看
while(player1.isnotdead | | player2.isnotdead)
-可能
&
这是你想用英语说的:“他们都活着的时候。”这与“他们都没死的时候”相同这与“P1没有死,P2没有死”是一样的。所以你想要&&。您当前的代码将继续运行,直到它们都死掉。(如果P1是活的,或者P2是活的,它将继续运行。只有当它们都死了时,这才是错误的。)除此之外,我认为你的方法应该去掉负数<在布尔逻辑中使用code>isdead时,更容易使您的头脑清醒-它消除了
可能的双重否定!isnotdead()
如果玩家在游戏中实际保持了分数,该怎么办?你只是重写了这个属性。@Jamiec-我看不懂OP的想法:),但我能读懂问题的内容——“但玩家1和玩家2的新变量”是真的,我只是陈述了显而易见的事实<代码>“重置”实例化的类而不是
重新创建
是它们要求的。这确实是最明显的答案!他确实评论说,在战斗之后(…)他们中的一个会被杀,也就是说,生命值为0,所以维持生命值没有什么意义,我也看不到另一个得分场。是的,我必须弄清楚这一点。我不是一个粉丝,因为它是重复的代码,但就这样吧@Pablo先生没有必要复制任何代码,我展示了一个硬编码
hp
的示例,但是如果您有许多属性需要重置,则无需复制任何内容即可完成
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;
    }
}