JavaScript inheritance (infinite loop when using s

2019-10-30 19:07发布

我看TUTS + OO JavaScript的训练:他们做原型继承的方式是这样的:

Employee.prototype = Object.create(Person.prototype);

但是,为什么不能我只是做(没有对象创建)

Employee.prototype = Person.prototype;

第二届会给一个无限循环: http://jsfiddle.net/VMqSy/

为什么? 控制台登录原型告诉我,1 Object.create()将给Employee.prototype 1的水平更__proto__这是Person.prototype ,我想

Answer 1:

如果你这样做(如图小提琴)

Employee.prototype = Person.prototype;

那么Employee会不会的子类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同时Object.create将创建一个没有额外的属性的对象。


在骗取钱财的无限循环发生,因为Employee.prototype.sayHi调用Person.prototype.sayHi ,但Employee.prototype.sayHi Person.prototype.sayHi ,因此自称 (原Person.prototype.sayHi时丢失您分配给Employee.prototype.sayHi )。

如果Employee.prototype === Person.prototype话,neccessarily, Employee.prototype.sayHi === Person.prototype.sayHi



文章来源: JavaScript inheritance (infinite loop when using superclass function)