如果你这样做(如小提琴所示)
Employee.prototype = Person.prototype;
thenEmployee
将不是 的子类Person
,而是它们将成为同一个类(尽管具有两个不同的构造函数)。
更准确地说,您添加到原型中的方法和属性Employee
对于任何Person
. 请注意,OOP 中的类不应以任何方式影响其超类。
Employee.prototype = Object.create(Person.prototype);
将创建一个新对象,类似于
Employee.prototype = {};
Employee.prototype.__proto__ = Person.prototype
除了Object.create
(不像__proto__
)适用于所有浏览器,或
Employee.prototype = new Person();
除了构造函数Person
还可以设置额外的属性,Employee.prototype
whileObject.create
将创建一个没有额外属性的对象。
小提琴中的无限循环发生是因为Employee.prototype.sayHi
调用Person.prototype.sayHi
, but Employee.prototype.sayHi
is Person.prototype.sayHi
,因此它调用自身Person.prototype.sayHi
(当您分配给 时,原始文件丢失了Employee.prototype.sayHi
)。
如果Employee.prototype === Person.prototype
那时,必然,Employee.prototype.sayHi === Person.prototype.sayHi
。