捋一捋js面向对象的继承问题
说到面向对象这个破玩意,曾经一度我都处于很懵逼的状态,那么面向对象究竟是什么呢?其实说白了,所谓面向对象,就是基于类这个概念,来实现封装、继承和多态的一种编程思想罢了。今天我们就来说一下这其中继承的问题。
好,先不直接上代码,而是反手来一波文字说明,捋一捋思路。
曾经一段时间因为javascript关于类实现继承的不规范,导致各种各样实现继承的代码;而实际上不管代码怎么变,继承都基于两种方式:
1.通过原型链,即子类的原型指向父类的实例从而实现原型共享。
2.借用构造函数,即通过js的apply、call实现子类调用父类的属性、方法;
原型链方式可以实现所有属性方法共享,但无法做到属性、方法独享(例如son1指向的是父类实例,son2,son3同样如此,大家都是吃的同一碗饭);
而借用构造函数除了能独享属性、方法外还能在子类构造函数中传递参数,但代码无法复用。总体而言就是可以实现所有属性方法独享,但无法做到属性、方法共享(例如,son1新增了一个函数,然后想让son2、son3一起用的话就无法实现了,只能son2,son3各自在构造函数中新增)。
组合继承就是把以上两种继承方式一起使用,把共享的属性、方法用原型链继承实现,独享的属性、方法用借用构造函数实现,所以组合继承几乎完美实现了js的继承;
为什么说是“几乎”?因为后来人们发现组合继承有一个小bug,实现的时候调用了两次父类,性能上不合格啊有木有!怎么解决呢?于是“寄生继承”就出来了。
寄生继承:
简单而言,寄生继承就是不用实例化父类了,直接实例化一个临时副本实现了相同的原型链继承。(即子类的原型指向父类原型的副本),如此一来,这个问题就完美解决了。
转载于:https://www.cnblogs.com/zhangnan35/p/8473061.html
捋一捋js面向对象的继承问题相关推荐
- js面向对象和继承的碎碎念
2019独角兽企业重金招聘Python工程师标准>>> 一.prototype属性的特点: 1.定义在prototype中的方法是"实例方法",必须是new出来的 ...
- JS面向对象的程序设计之继承-继承的实现-借用构造函数
JS面向对象的程序设计之继承-继承的实现-借用构造函数 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误 ...
- JS 面向对象编程、原型链、原型继承(个人学习总结)
一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...
- js面向对象之封装,继承,多态,类的详解
封装 在面向对象的操作中,我们有完全不同的一些写法. 想要封装我们的对象,就要用到构造函数.我们需要创建构造函数,构造函数和函数一致,都是通过function创建的 首字母大写(规范,为了和普通函数进 ...
- JavaScript(JS) 面向对象(封装、继承、多态)
面向对象是把事物给对象化,包括其属性和行为.面向对象编程更贴近实际生活的思想.可以简单的理解面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象.本文主要介绍JavaScrip ...
- js中的面向对象、继承、函数重写
通过示例讲解 一下,先看一个示例 示例demo: <script>//创建一个父函数(父类)var Mammal = function (name) {this.name = name;} ...
- JS面向对象一:MVC的面向对象封装
JS面向对象一:MVC的面向对象封装 MDNjavascript面向对象 面向对象(Object-Oriented) 面向对象里面向的意思是以...为主,面向对象编程既以对象为主的编程. 面向对象的一 ...
- 简单粗暴地理解js原型链–js面向对象编程
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
- 对js面向对象的理解
转自:http://www.cnblogs.com/jingwhale/p/4678656.html js面向对象理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP ...
最新文章
- 指纹传感器沾水便失效的原因解析
- SAP RETAIL 如何确定自动补货触发的单据类型 II
- 查看计算机用户创建时间,敬业签在电脑端怎样查看团签内容的创建时间?
- Jsoup代码解读之一-概述
- 【设计模式 04】代理模式
- spark学习-54-Spark RDD的clean()方法
- 上海交通大学2002年数学分析考研试题
- mysql中CONCAT值为空的问题解决办法
- 计算机开机无讯号,【图片】电脑突然开机没反应,显示器没信号!~【显卡吧】_百度贴吧...
- 自己实现一个简易web服务器
- 简单的Mysql常用命令
- Android开发之Activity(实现Activity跳转)
- C语言PAT乙级试题答案1016
- c语言饭卡管理系统_C语言饭卡管理系统(附代码) -
- 笔记本风扇控制程序,支持蓝天模具笔记本
- Vue3 Vite 项目踩坑札记
- 麻省理工大学计算机中心,Massachusetts Institute of Technology 麻省理工大学
- 2016.03.07错误记录
- 呼叫中心-自动外呼接口设置
- 返回多字段并用数组分割方式展示
热门文章
- MSP430F5XXX中的ADC12使用
- 【语义分割】ICCV21_Mining Contextual Information Beyond Image for Semantic Segmentation
- Ubuntu中配置SSH服务
- linux c 服务程序,Linux C 后台服务程序单进程控制
- 2021 高考 成绩查询,精准预测!2021全国大学录取分数线表查询
- 9月份计算机应用基础统考,2018年9月计算机应用基础统考题库-网考计算机应用基础真题1...
- linux so_nosigpipe,TCP_NODELAY/SO_LINGER/SO_NOSIGPIPE/MSG_NOSIGNAL设置
- mysql分页查询减轻压力_mysql分页查询优化
- DICOM的常用Tag分类和说明
- 《见字如面》赏析-待续