所以我有这个继承的代码:
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的价值,我不希望它这样做。
答案 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
对象相等}。因此,它们的属性是相同的。