Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript继承(使用超类函数时无限循环)_Javascript_Oop - Fatal编程技术网

JavaScript继承(使用超类函数时无限循环)

JavaScript继承(使用超类函数时无限循环),javascript,oop,Javascript,Oop,我正在观看Tuts+OOJavaScript培训:他们进行原型继承的方式如下所示: Employee.prototype = Object.create(Person.prototype); 但是为什么我不能(不创建对象) 第二个将给出一个无限循环: 为什么??控制台记录原型告诉我,1 withObject.create()将为Employee.prototype 1提供更高级别的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我正在观看Tuts+OOJavaScript培训:他们进行原型继承的方式如下所示:

Employee.prototype = Object.create(Person.prototype);
但是为什么我不能(不创建对象)

第二个将给出一个无限循环:

为什么??控制台记录原型告诉我,1 with
Object.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();