0

所以我有这个继承的代码:

enemy = new Object(hawk);

家长是这样的:

function CreateEnemy(name, health, damage){
    this.name = name;
    this.health = health;
    this.damage = damage;
}

var hawk = new CreateEnemy("Hawk", 200, 20);

每当我这样做

enemy.health -= 10;

它也改变了 hawk.health 的值,我不希望它这样做。

4

2 回答 2

2

我想你正在寻找

CreateEnemy.prototype.clone = function() {
    return new CreateEnemy(this.name, this.health, this.damage);
};

然后做

var enemy = hawk.clone();

现在一个对象上的更改不会反映在另一个对象上,因为它们是不同的CreateEnemy实例。


如果您正在寻找原型继承,Object.create那就去做吧。只要那里的属性没有被覆盖,更改hawk就会反映在上面:enemy

var enemy = Object.create(hawk);
enemy.name; // "Hawk" - inherited
enemy.damage = 25; // assignment creates an own property on enemy
enemy.damage; // 25
enemy.health -= 10; // as does when getting an inherited value before:
enemy.health; // 190
hawk.health; // 200
于 2013-09-13T12:40:21.257 回答
1

在这种情况下,CreateEnemy它不是一个parent对象,它是一个函数,它正在创建一个对象hawk,您之前已使该对象等于名为enemy. 因此,它们的属性是相等的。

于 2013-09-13T12:40:52.493 回答