如果你这样做(如小提琴所示)
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.prototypewhileObject.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。