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

これは「回答済み」ですが、後世の代替案を提供させてください。

親のコンストラクターを呼び出して親のプロトタイプを取得することはお勧めできません。これを行うと、副作用が生じる可能性があります。ID の設定、インスタンス数の追跡など、コンストラクター内で発生することは何でも。

Child コンストラクター内で Parent.call() を使用し、 Object.create または polyfill を使用してそのプロトタイプを取得できます。

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 に答える