我看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
,我想
如果你这样做(如图小提琴)
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
。