1

很琐碎的问题

我试图理解javascript中的继承

function Animal() {
  this.eats = true;
}
function Rabbit() {
  this.jumps = true;
}
//Rabbit is-a Animal
Rabbit.prototype = Animal;  //I'm assuming this does not inherit

alert(Rabbit.prototype.eats); // returns undefined

什么是正确的方法?

4

1 回答 1

7

这是“答案”,但请允许我为后代提供替代方案。

调用父级的构造函数来获取父级的原型并不是一个好主意。这样做可能会产生副作用;设置 ids,跟踪实例的数量,无论在构造函数中发生什么。

您可以在 Child 构造函数和 Object.create 或 polyfill 中使用 Parent.call() 来获取其原型:

function Animal () {
    this.eats = true;
}

function Rabbit (legs) {
    Animal.call(this);
    this.jumps = true;
}
Rabbit.prototype = Object.create(Animal.prototype);

// Or if you're not working with ES5 (this function not optimized for re-use):
Rabbit.prototype = (function () {
                        function F () {};
                        F.prototype = Animal.prototype;
                        return new F();
                    }());

var bugs = new Rabbit();
alert(bugs instanceof Animal); // true
alert(bugs.eats); // true
于 2013-03-21T20:40:01.337 回答