对象的继承
2021/9/6 6:10:21
本文主要是介绍对象的继承,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
对象的继承
一、原型链继承
对象的继承
可以看到我们在控制台打印一个数组,可以看到数组的原型是Array,而Array也有一个原型是Object。也就是说存在着一下的这个关系。
[]->Array.prototype->Object.prototype
数组是可以拿到这条链上的方法来用的。
像数组的 [].map()和Object上的toString()方法都能用。
那现在有以下代码:
我们知道,实例可以继承自身原型上的实例和方法,那我现在想要Sub的实例sub1继承Super上的方法该怎么做呢?
我们知道实例可以访问自身的原型,那我们是不是也可以把Sub的原型成为Super的实例呢?
Sub.prototype = new Super()
这样是不是就将他们串起来了。
那到底拿不拿得到呢
显然已经拿到了,这就是原型链继承。
那这种继承方式有没有问题呢?
我们又创建了一个Sub的实例sub2,通过sub1改掉a的值看又没有问题。
这样看好像没什么问题。那换成数组呢?
哎,我靠。按常理应该只要sub1会改才对啊,为什么sub2也会改了呢?这就是有问题啊。
以上证明原型链继承会存在:引用值共享的问题。
二、构造函数继承
我们Sub想要继承Super上的值要怎么做呢?
最简单的方法是不是将Super上的值复制到Sub中就可以实现了。
那要怎么拿呢?
要拿到Super的值是不是相当Super执行了一遍。
这样就可以拿到了吗?
这里我们可以看到,Super();是独立执行的,那么它的this指向是不是指向了全局。
可以看到控制台打印了两次window。
我们希望的是什么呢?我们希望在调用Super的时候this指向指向Sub的实例。
也就是说上面的this要修改为下面的this,要和new后的this指向一样。
我们可以通过call()强绑定的方法修改。
那这样行不行呢?
哎,成功了。
这就是构造函数继承,它解决的引用值共享的问题。
那它有没有问题呢?
调用了一下say方法发现报错了!!!因为Sub上根本没有say方法,那还是不能满足我们的需求啊。
也就是说构造函数继承存在:没办法拿到原型上的方法的问题。
三、组合继承
上面两种继承方式都有问题,那我们是不是可以将它们结合一下。
这篇关于对象的继承的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)