你将如何使它成为父类的值不会为继承的对象

时间:2013-09-13 12:36:20

标签: javascript

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

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的价值,我不希望它这样做。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

在这种情况下,CreateEnemy不是parent对象,它是一个创建对象hawk的函数,您之前已将其与enemy对象相等}。因此,它们的属性是相同的。