JavaScript继承(使用超类函数时无限循环)
我正在观看Tuts+OOJavaScript培训:他们进行原型继承的方式如下所示:JavaScript继承(使用超类函数时无限循环),javascript,oop,Javascript,Oop,我正在观看Tuts+OOJavaScript培训:他们进行原型继承的方式如下所示: Employee.prototype = Object.create(Person.prototype); 但是为什么我不能(不创建对象) 第二个将给出一个无限循环: 为什么??控制台记录原型告诉我,1 withObject.create()将为Employee.prototype 1提供更高级别的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
Employee.prototype = Object.create(Person.prototype);
但是为什么我不能(不创建对象)
第二个将给出一个无限循环:
为什么??控制台记录原型告诉我,1 withObject.create()
将为Employee.prototype 1提供更高级别的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
然后Employee
将不是Person
的子类,而是成为同一个类(尽管有两个不同的构造函数)
更确切地说,您添加到Employee
原型中的方法和属性对于任何人员都是可见的。注意,OOP中的类不应该以任何方式影响它们的超类
将创建一个新对象,类似于
Employee.prototype = {};
Employee.prototype.__proto__ = Person.prototype
除了对象。创建
(不同于\uuuuuu proto\uuuuuu
)可在所有浏览器中工作,或
Employee.prototype = new Person();
除了Person
的构造函数之外,还可以为Employee.prototype
设置附加属性,而Object.create
将创建一个没有附加属性的对象
小提琴中的无限循环是因为Employee.prototype.sayHi
调用Person.prototype.sayHi
,但是Employee.prototype.sayHi
是Person.prototype.sayHi
,因此它调用自己(当您分配给Employee.prototype.sayHi
时,原始Person.prototype.sayHi
丢失)
如果Employee.prototype===Person.prototype
那么,必要的话,Employee.prototype.sayHi===Person.prototype.sayHi
这两行之间的区别是什么?你的意思是Employee.prototype=Person.prototype;
(来自小提琴)?
Employee.prototype = Object.create(Person.prototype);
Employee.prototype = {};
Employee.prototype.__proto__ = Person.prototype
Employee.prototype = new Person();