手机版

关于JavaScript面向对象继承

时间:2021-08-26 来源:互联网 编辑:宝哥软件园 浏览:

一、继承的概念

子类共享父类的数据和方法的行为称为继承。

二、如何继承E55?探索JavaScript继承的本质

2.1构造函数之间的“复制和粘贴”

第一种方式是通过构造函数继承,可以理解为子类直接复制父类构造函数的代码,然后按照一定的规则“粘贴”到自己的构造函数中,供自己使用。例如:

如果A想继承B的属性,我可以把这个. name=name复制粘贴到A函数中吗?简单粗暴。

因此,在a中,直接执行b函数意味着执行this.name=name。

如果直接尝试这个,就找不到了,因为B中的这个指向B的实例化对象,A中的这个指向A的实例化对象,所以需要统一这个的指向。

这样,标准构造函数之间的“代码复制粘贴”就完成了一次,即继承。这其实就是ES6中super关键字的实现原理。

2.2原型链要“挤进一个访问者”

当然,这还不够,因为在实践中,构造函数B还可以将一些方法和属性扩展到原型链,比如:

我们在构造函数B中扩展了一个技巧方法,发现上面的“复制粘贴”方法效果不好,对吧?这是因为A的原型链和B的原型链还没有“连接”起来,所以我们需要在A和B之间搭建一座桥梁来连接它们。

熟悉基本原型链的人都知道,原型链的通信是通过隐式原型(_ prototype _ _)实现的。基本的原型链是这样的:

这是基本的原型链。目前的情况是A应该继承B的属性和方法,所以B应该加入到原型链中,B应该在A的上面,所以理想的情况应该是这样的:

其实我们这样做,就是让a . prototype . _ _ proto _ _ _=b . prototype。

试试控制台。成功了。

总结一下:ES5实现继承需要两步。一是符合“代码复制粘贴”标准;第二,在原型链上搭建桥梁。

第三,ES6的继承实际上只是一个不同的名字

首先要明确的是,JavaScript没有真正的“类”概念,ES6中的类是ES5中的构造函数。

很容易验证,A类的类型打印为函数。

ES6继承类一定要分两步吗?答案是肯定的,我们来看看ES6的继承是如何实现的:

其实原理是完全一样的。extends相当于做一个. prototype . _ _ proto _ _=b . prototype,而super相当于在ES5中执行操作B.call(this,name),只是把操作的名字改得更接近Java。

以上是边肖介绍的JavaScript面向对象继承的详细说明和集成。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:关于JavaScript面向对象继承是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。