js传宗接代---继承
前几天重温了一下js的继承,今天分享给大家:
一,类式继承。
所谓的类式继承就是:第二个类的原型prototype被赋予了第一个类的实例,如subcals.prototype=new supercls();
原理:新创建的对象复制了父类的构造函数内的属性和方法,并且将原型_proto_指向了父类的原型对象;
虽然是继承了但是也是有缺点的,由于父类通过其原型prototype对父类实例化继承了父类,所以说父类中的属性和方法也成了引用类型,就会在引用类共用,因此只要一个子类中改变了原型中的父类构造函数那么就会直接影响其他子类对这个父类的引用。
二,构造函数继承。
所谓构造函数继承就是在原型函数中使用call,和apply 。(具体区别就不在这里细说了)
superclass.call(this);
原理:对superClass调用这个方法就是将子类中的变量在父类中执行一遍,由于父类中是this绑定属性的,因此子类自然也就继承了父类的共有属性。
缺点:由于这种类型的继承没有涉及到原型Prototye,所以父类的原型方法自然不会被子类继承。
三,组合继承
原理:在子类构造函数中执行父类构造函数,在子类原型上实例化父类就是组合继承模式。这样就融合了类式继承和构造函数继承的优点,但是也并不是没有缺点了。
我们在使用构造函数继承时又调用了一遍父类的构造函数,而在实现子类的原型的类式继承时调用了一遍父类的构造函数,因此调用了两遍。(虽然有缺点但是在我的代码中出现的频率还是挺高的不知道大家怎么使用的)
四,原型继承;
原理:根据已有的对象创建一个新的对象,同时不必创建新的自定义对象类型。
function inheritobject(0){
function f(){}
f.prototype=o;
return new f();
}
缺点:与类式继承一样,引用类型;
五,寄生继承。
寄生继承就是对原型继承的第二次分装,并且在这个第二次封装中对继承的对象进行了扩展,这样新创建的对象不仅有父类中的属性和方法而且还添加新的属性方法。
六,寄生组合继承。
顾名思义就是寄生式继承和组合继承的结合体。
js传宗接代---继承的更多相关文章
- JS对象继承篇
JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...
- js实现继承的5种方式 (笔记)
js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...
- js实现继承的方式总结
js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...
- 【09-23】js原型继承学习笔记
js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...
- js实现继承的两种方式
这是面试时面试官会经常问到问题: js的继承方式大致可分为两种:对象冒充和原型方式: 一.先说对象冒充,又可分为3种:临时属性方式.call().apply(): 1.临时属性方式: 当构造对象son ...
- js实现继承
js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...
- 浅谈JS的继承
JS继承 继承是OO语言中最为人津津乐道的概念,许多OO语言都支持两种方式的继承:接口继承:实现继承. 接口继承:只继承方法签名. 实现继承:继承实际的方法. 由于ES里函数没有签名,所以在ES里面无 ...
- JS类继承常用方式发展史
JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...
- js实现继承的5种方式
js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...
随机推荐
- Java核心技术 卷I chapter05 继承
2017年4月10日19:41:44 仅仅用于打好基础 1. 在Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承! 2.关键字super的使用方法: (1) 子类中想调用父类中的 ...
- Spring装配bean--01组件扫描和自动装配
Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系 Spring提供了三种主要的装配机制: 在XML中进行显式配置 在Java中进行显式配置 隐式的bean发现机制和自动装 ...
- hdu1556 Color the ball 简单线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 简单的线段树的应用 直接贴代码了: 代码: #include<iostream> # ...
- angular.js封装的文件上传指令
今天把最近用到的东西整理一下,直接上代码,需要申请犀牛存储图片,文件 1.html div div img.img-thumbnail.center-block(ng-src="{{ltUp ...
- Spring——Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)
基于Spring-4.3.7.RELEASE Spring的配置不仅仅局限在XML文件,同样也可以使用Java代码来配置.在这里我使用XML配置文件的方式来粗略地讲讲WebApplicationCon ...
- B507实验室打印机连接方法
一.准备工具 实验室打印机内网IP地址:172.16.135.41 ,这个地址要看具体的打印机地址(可能会更换). 从实验室QQ群(土匪窝)上下载打印机驱动,如下图所示. 3. 非常重要的事情:请链接 ...
- Add Two Numbers 2015年6月8日
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- Linux下Samba服务器的安装和配置
第一步:sudo apt-get install samba smbclient 安装samba服务器. 第二步:打开/etc/samba/smb.conf文件,在末尾添加下面的字段: [用户名] c ...
- 利用formatter原理自动化参数化查询
前言:对于经常忙于服务端开发的小伙伴来说,与DB层打交道是在正常不过的事了,但是每次页面的查询条件新增往往意味着后端代码参数化同比增长,当然你可以不使用sqlhelper自带的参数化条件查询,可以直接 ...
- centos7下,解决Apache错误日志文件过大问题
1,日志文件太大问题 第一步:停止Apache服务的所有进程,删除 /var/log/httpd目录下的 error.log.access.log文件 第二步:打开 /etc/httpd/conf ...