もしそうなら(フィドルに示されているように)
Employee.prototype = Person.prototype;
thenEmployeeは のサブクラスでPersonはなく、同じクラスになります (ただし、2 つの異なるコンストラクターがあります)。
より正確には、 のプロトタイプに追加するメソッドとプロパティは、任意のEmployeeにも表示されますPerson。OOP のクラスは、スーパークラスに影響を与えてはならないことに注意してください。
Employee.prototype = Object.create(Person.prototype);
と同様に、新しいオブジェクトを作成します
Employee.prototype = {};
Employee.prototype.__proto__ = Person.prototype
except Object.create(unlike __proto__) はすべてのブラウザーで動作します。
Employee.prototype = new Person();
ただし、のコンストラクターは追加のプロパティをPerson設定することもできますが、追加のプロパティなしでオブジェクトを作成します。Employee.prototypeObject.create
あなたのフィドルの無限ループは、 が を呼び出しているために発生しますが、Employee.prototype.sayHiそれ自体が呼び出されます(元は に割り当てられたときに失われました)。Person.prototype.sayHiEmployee.prototype.sayHi Person.prototype.sayHiPerson.prototype.sayHiEmployee.prototype.sayHi
その場合Employee.prototype === Person.prototype、必然的に、Employee.prototype.sayHi === Person.prototype.sayHi.