JS学习笔记Day24
一、闭包和函数
(一)什么是闭包函数
概念:简单说就是函数中嵌套函数,嵌套在这里面的函数叫做闭包函数,外面的函数叫做闭包环境
作用:通过闭包函数,可以访问到闭包函数所在局部作用域中的变量及参数
特点:闭包的特点或本质:将局部变量常驻内存,这既是它的优点也是它的缺点,使用不当还会造成内存泄漏
闭包的原理:闭包是利用JS中的垃圾回收机制,当一个函数被调用时,会开辟空间,函数调用结束,会释放空间,但如果被释放空间时,发现其中有变量正在被其他函数使用时,则这个变量会常驻内存而不被回收
二、继承和函数
(一)构造函数继承
1、Call/apply 继承
2、Call 与 apply 的异同:
1)第一个参数 this 都一样,指当前对象
2) 第二个参数不一样:call 的是一个个的参数列表;apply 的是一个数组(arguments 也可以)
3、构造继承特点:
1)子类实例共享父类引用属性的问题
2)创建子类实例时,可以向父类传递参数
3) 可以实现多继承(call 或 apply 多个父类对象)
4、构造继承缺点:
1)实例并不是父类的实例,只是子类的实例
2)只能继承父类的实例属性和方法,不能继承原型属性和方法
3)无法实现函数复用,每个子类都有父类实例函数的副本,影响性能
(二)Prototype 的概念
1、 Javascript 中的每个函数都有 prototype 属性,指向函数的原型对象。每一个对象都有_ _ proto__属性,指向该对象的父对象。
(三)原型链继承
1、特点:
1)非常纯粹的继承关系,实例是子类的实例,也是父类的实例
2)父类新增原型方法/原型属性,子类都能访问到
3) 简单,易于实现
2、缺点:
1) 要想为子类新增原型属性和方法,必须要在new 父类()这样的语句之后执行。要想为子类新增实例属性和方法,必须要在构造函数中添加。
2)无法实现多继承
3)来自原型对象的所有属性被所有实例共享
(四)混合继承
1、 特点:
1)可以继承实例属性和方法,也可以继承原型属性和方法
2) 既是子类的实例,也是父类的实例
3) 不存在引用属性的共享问题
4)可传参
5)函数可复用
2、缺点:调用了两次父类构造函数,生成了两份实例
(五)扩展:寄生组合继承
1、特点: 完美
JS学习笔记Day24的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- JS 学习笔记--9---变量-作用域-内存相关
JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...
- WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)
WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...
- WebGL three.js学习笔记 法向量网格材质MeshNormalMaterial的介绍和创建360度全景天空盒的方法
WebGL学习----Three.js学习笔记(5) 点击查看demo演示 Demo地址:https://nsytsqdtn.github.io/demo/360/360 简单网格材质 MeshNor ...
- WebGL three.js学习笔记 创建three.js代码的基本框架
WebGL学习----Three.js学习笔记(1) webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的 ...
- vue.js 学习笔记3——TypeScript
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...
- 2019-4-29 js学习笔记
js学习笔记一:js数据类型 1:基本数据类型 number类型(整数,小数) String类型 boolean类型 NaN类型其实是一个nu ...
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
随机推荐
- flex 增长与收缩
flex:auto 将增长值与收缩值设置为1,基本大小为 auto . flex:none. 将增长值与收缩值设置为0,基本大小为 auto .也就是固定大小. 增长: 基本大小 + 额外空间 *( ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- OpenCL——把vector变成scalar
https://stackoverflow.com/questions/46556471/how-may-i-convert-cast-scalar-to-vector-and-vice-versa- ...
- vue build错误异常的解决方法
在生成vue项目的时候,出现如下错误 ERROR in static/js/index.d66d806fcdd72b36147b.js from UglifyJs Unexpected token: ...
- 使用Server Trigger保护重要的数据库对象
一 .Server Trigger的简单介绍 在SQL Server数据库中,Server Trigger 是一种特殊类型的存储过程,它可以对特定表.视图或存储中的必然事件自动响应,不由用户调用.创建 ...
- Hibernate执行SQL语句实现查询修改功能!
今天玩Hibernate时突然就想写写SQL语句查询... DAO : //查询 public List<?> createSqlQueryList(final String queryS ...
- 在html代码中js的script标签建议放在那里?
今天编写了一个简单的js代码,F12有错误,然后发现是<script>放的位置有问题.之前在我的印象当中,说的是这个标签放在哪里都可以,然而...并不是这样的,例如我现在练习的这个代码,写 ...
- python接口自动化-json数据处理
前言 有些post的请求参数是json格式的,需要导入json模块进行处理,json是一种数据交换格式,独立于编程语言 一般常见的接口返回数据也是json格式的,我们在做判断的时候,往往只需要提取其中 ...
- Spring Boot自定义Banner
在2016年的最后一天,借用Spring Boot的Banner向各位程序猿同仁们问候一声:Happy New Year. 接下来我们就来介绍一下这个轻松愉快的自定义banner功能.实现的方式非常简 ...
- springboot mybatis 整合
新建项目在上一篇. 第二步:创建表和相应的实体类 实体类:user.java package com.qtt.im.entity; import java.io.Serializable; publi ...