当涉及到 JavaScript 原型继承时,我以为我完全理解了自己在做什么。原来这是一个残忍的情妇。这是我想出的一个例子,我使用 Pokemon(是的,Pokemon ...)来展示不同的进化如何相互继承。
function Squirtle(firstPower) {
this.firstPower = firstPower;
}
Squirtle.prototype.useFirstPower = function () {
console.log("Using " + this.firstPower);
}
function Wartortle(firstPower, secondPower) {
Squirtle.call(this, firstPower);
this.secondPower = secondPower;
}
Wartortle.prototype.useSecondPower = function () {
console.log("Using " + this.secondPower);
}
var mySquirtle = new Squirtle("water squirt");
mySquirtle.useFirstPower(); //works
//squirtle evolved
mySquirtle.prototype = Object.create(Wartortle.prototype);
mySquirtle.useSecondPower(); //no method found
这里想要的效果是保留 的prototype
方法Wartortle.prototype
和 的方法Sqruitle.prototype
。我假设通过Squirtle.call(...)
在Wartortle
构造函数中使用将允许我继承所有方法。显然不是。我觉得我比以往任何时候都迷失了这些东西。
如何正确继承并保留超级和子构造函数的所有方法?我在这里做错了什么?
编辑
如下所述,我可以使用创建一个新对象,new Wartortle
但我认为我所追求的是将原始对象全部扩充在一起。这将如何工作或不工作?