Javascript 自定义类的JS原型继承
有两个构造函数:Animal和Rabbit(类仿真)。如何正确使用原型设置此类的继承?我看过两个版本:Javascript 自定义类的JS原型继承,javascript,Javascript,有两个构造函数:Animal和Rabbit(类仿真)。如何正确使用原型设置此类的继承?我看过两个版本: Rabbit.prototype.__proto__ = Animal.prototype; 我认为它的效果和我预期的一样好。但此版本在IE10-中不起作用,有以下版本: Rabbit.prototype = Object.create(Animal.prototype); 这个版本看起来也不错,但我必须为它创建一个附加对象。首选哪个版本?可能还有别的事吗?提前谢谢 版本Rabbit.pr
Rabbit.prototype.__proto__ = Animal.prototype;
我认为它的效果和我预期的一样好。但此版本在IE10-中不起作用,有以下版本:
Rabbit.prototype = Object.create(Animal.prototype);
这个版本看起来也不错,但我必须为它创建一个附加对象。首选哪个版本?可能还有别的事吗?提前谢谢 版本
Rabbit.prototype=Object.create(Animal.prototype)首选代码>
Mozilla开发者网络(MDN)对\uuuu proto\uuu
发出以下警告:
警告:根据现代JavaScript引擎优化属性访问的本质,更改对象的[[Prototype]]在每个浏览器和JavaScript引擎中都是一个非常缓慢的操作。改变遗传对性能的影响是微妙而深远的,不仅限于花在obj上的时间。proto=。。。语句,但可以扩展到可以访问其[[Prototype]]已更改的任何对象的任何代码。如果您关心性能,则应避免设置对象的[[Prototype]]。相反,使用object.create()创建具有所需[[Prototype]]的新对象
你应该有这样的东西:
Rabbit.prototype = Object.create(Animal.prototype);
Rabbit.prototype.constructor = Rabbit;
如果不编写第二行,则Rabbit
的实例将具有Animal
构造函数
此外,还可以执行以下操作:
Rabbit.prototype = new Animal();
但在这种情况下,您还将触发构造函数,这不是首选。每个对象都有一个内部[[Prototype]]属性,其值是前者从中继承的对象
然后Rabbit.prototype.\uuu-proto\uuu=Animal.prototype
更改Rabbit.prototype
的[[prototype]],使其继承自Animal.prototype
相反,Rabbit.prototype=Object.create(Animal.prototype)
将整个Rabbit.prototype
替换为另一个对象,该对象继承自Animal.prototype
在实践中,区别在于:
- 修改[[Prototype]]被很多人认为是一种不好的做法,而且性能很差
- 用不同的对象替换整个原型只会影响在此之后创建的实例。以前的实例仍将继承以前的
Rabbit.prototype
如果你用一个不同的对象替换整个原型,你应该考虑复制旧的一个属性(和符号)。例如,
构造函数
属性