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年半过去了.突然有些感慨, ...
随机推荐
- vue学习之ajax 简单快速使用axios
vue2.x 推荐使用axios 1.首先使用安装 npm install axios -S 2.在哪用在哪引入 import axios from 'axios' 或则在main.js 中引入 在申 ...
- 一起学Android之ToggleButton和Switch
本文以一个简单的小例子,简述在Android开发中ToggleButton(开关按钮)和Switch(开关)的简单使用,仅供学习分享使用. 概述 ToggleButton是一个有两种状态(checke ...
- 扫码下单支持同桌单人点餐FAQ
一.使用场景 满足较多商户希望同一桌台,各自点各自的菜品的业态场景(例如杭味面馆,黄焖鸡米饭店,面馆等大多数轻快餐店) 二.配置步骤及注意事项 管理员后台配置--配置管理--店铺配置--扫码点餐tab ...
- MySQL 基础知识梳理学习(五)----半同步复制
1.半同步复制的特征 (1)从库会在连接到主库时告诉主库,它是不是配置了半同步. (2)如果半同步复制在主库端是开启了的,并且至少有一个半同步复制的从节点,那么此时主库的事务线程在提交时会被阻塞并等待 ...
- C#图片添加文字水印
/// <summary> /// 给图片添加文字水印 /// </summary> /// <param name="img">图片</ ...
- ASP.NET Zero--WEB.HOST应用程序
WEB.HOST应用程序 AspNet Zero解决方案包含一个额外的项目Web.Host,它将所有应用程序功能公开为API.因此,您可以从任何设备使用API.实际上,Web.Mvc项目也是这样做 ...
- 【原】无脑操作:IDEA使用时,提示"8080端口被占用"的解决
1.问题描述:IDEA使用时,提示"8080端口被占用" Description: The Tomcat connector configured to listen on ...
- pipe size设置
我所用的软件架构,使用pipe来实现线程之间的大量数据的传输.在实际操作中,pipe中传输的是数据的指针,而不是数据本身. 但是在调试过程中,我发现,如果我尝试往pipe里面write10000个指 ...
- 英语-TOEFL和GRE复习计划与资料
目录 一. TOEFL (1). 阅读: 60 minutes (2). 听力: 50 minutes (3). 口语: 20 minutes (4). 作文: 60 minutes 单词准备 其他资 ...
- 安利一下workflowy和Dynalist
最近有比较幕布这款笔记记录软件,很是喜欢那种可以记录笔记的方式,不过我还追溯了一下这种笔记模式,发现了workflowy和Dynalist这两款风格一样的软件.大家可以自行注册试试.其中Dynalis ...