我正在尝试对学生的Javascript代码进行故障排除。当前看起来像这样:

var Alien = {
    hp: Math.floor(Math.random()*100)
}

var alien1 = new Object(Alien);
var alien2 = new Object(Alien);


当我叫Alien1.hp等于61时,Alien2.hp也等于61。为什么?我如何更改它,以便每个Alien实例的运行状况都不同。提前致谢!!

最佳答案

因为只有一个Alien,所以只调用一次RNG。您可能也希望Alien成为自己的东西,而不是使用Object构造函数。

function Alien() {
  this.hp = Math.floor(Math.random() * 100);
}

> a1 = new Alien();
=> Alien {hp: 13}
> a2 = new Alien();
=> Alien {hp: 42}


这样,您便可以将方法添加到Alien的原型中,例如,

function Alien(name) {
  this.name = name;
  this.hp   = Math.floor(Math.random() * 100);
}

Alien.prototype.toString = function() {
  return 'Alien "' + this.name + '", HP: ' + this.hp;
}

tom = new Alien('Tom');
console.log("" + tom);
=> Alien "Tom", HP: 13

关于javascript - 为什么所有实例都具有相同的运行状况,即使对象生成随机运行状况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32913962/

10-09 07:40