原型链、闭包、手写一个闭包函数、 闭包有哪些优缺点、原型链继承

什么是原型链?

原型链是一种查找规则

为对象成员查找机制提供一个方向

因为构造函数的 prototype 和其实例的 __ proto __ 都是指向原型对象的

所以可以通过__proto__ 查找当前的原型对象有没有该属性,

没有就找原型的原型, 依次类推一直找到Object( null ) 为止

这种链式查找过程称之为原型链

什么是闭包?

闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是 ,一个作用

域可以访问另外一个函数内部的局部变量。

function fn() {var num = 10;function fun() {console.log(num); }return fun;
}
var f = fn(); 
f();

优点: 延长变量作用域、在函数的外部可以访问函数内部的局部变量,

缺点: 容易造成内层泄露,因为闭包中的局部变量永远不会被回收 解决方法: 需要手动清除 把变量变为null

继承

Call 式继承继承的是属性,原型继承继承的是方法。

// #1 Call 式继承 / 构造函数继承:继承的是属性
Person.call(this, name, age)
// #2 原型继承:继承的是方法
Star.prototype = new Person()
Star.prototype.constructor = Star

将需要继承的对象挂到当前对象的原型对象上面, 通过原型链访问

子类的原型对象 = 父类的构造函数创建出的对象

特点:1、实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性。(新实例不会继承父类实例的属性!

缺点:1、新实例无法向父类构造函数传参。

   2、继承单一。

   3、所有新实例都会共享父类实例的属性。(原型上的属性是共享的,一个实例修改了原型属性,另一个实例的原 型属性也会被修改!)

混合式继承

  1. 遍历父对象成员, 添加给子对象构造函数的原型

    • 特点: 多个对象继承, 不会覆盖原来的默认原型

    • 缺点: 代码量增多

ES6 class类实现继承

// 创建一个父类class father {// 在 constructor 里面定义实例constructor(house, car) {this.house = housethis.car = car}// 在外面定义方法sayHi() {console.log('你好啊')}}// 实例化 fatherconst f = new father('汤臣一品', '劳斯莱斯')console.log(f)// 子类继承父类class son extends father {// 如果没有提供构造函数, 在继承时, 会默认自动借调父构造函数	constructor(house, car, study) {// 你写的构造函数中, 没有借调父构造函数super(house, car) // 触发调用父构造函数, 进行实例的属性初始化this.study = 'study'}work() {console.log('找乐子')}}// 实例化 sonconst s = new son('乐高一号', '跑跑卡丁车', '做美食')console.log(s)

通过class声明一个类,constructor()作为构造函数,属性在constructor()中初始化

可以在class内定义非静态方法,静态方法绑定在构造器上

类的所有方法都是不可枚举的,也符合内部方法

实例化一个class必须要new关键字

extends实现继承,子类中调用super()访问父类构造函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【YOLOv9改进[Conv]】使用YOLOv10的空间通道解耦下采样SCDown模块替换部分CONv的实践 + 含全部代码和详细修改内容

本文将使用YOLOv10的空间通道解耦下采样SCDown模块替换部分CONv的实践 ,文中含全部代码和详细修改内容。 目录 一 YOLOv10 1 空间通道解耦下采样 2 可视化

UFS协议—新手快速入门(二)【5-6】

目录 五、UFS协议栈 六、UFS技术演进与详解 1、UFS应用层 设备管理器 任务管理器 2、UFS传输层 3、UFS互联层 UFS协议—新手快速入门(一)【1-4】 五、UFS协议栈 UFS(Universal Flash Storage)协议是针对固态存储设备&…

渡众机器人自动驾驶小车运行Autoware 实现港口物流运输

Autoware 是一个开源的自动驾驶软件堆栈,提供了丰富的功能和模块,用于实现自动驾驶车辆的感知、定位、规划和控制等功能。北京渡众机器人公司将多款自动驾驶小车在多场景运行Autoware ,它可以实现以下功能: 1. 感知:利…

Spark的性能调优——RDD

前言 RDD 是 Spark 对于分布式数据集的抽象,每一个 RDD 都代表着一种分布式数据形态。比如 lineRDD,它表示数据在集群中以行(Line)的形式存在;而 wordRDD 则意味着数据的形态是单词,分布在计算集群中。 参…

职称继续教育--专业课2

单选题(共10题,每题3分) 1、根据本讲,“水十条”总体框架包括()个层次。 C、5 2、根据“水十条”目标指标层,到2020年,地级及以上城市建成区的黑臭水体控制(&#xff09…

数据挖掘综合案例-家用热水器用户行为分析与事件识别

文章目录 1. 背景与挖掘目标2. 分析方法与过程3. 数据分析3.1 数据探索分析3. 2 数据预处理1. 属性约束2. 划分用水事件3. 确定单次用水事件时长阈值4. 属性构造5.筛选候选洗浴事件 3.3 模型构建3.4 模型检验 4. 思考总结 1. 背景与挖掘目标 随着国内大家电品牌的进入和国外品…

了解CAN功能

了解CAN功能,学习CAN功能,理解CAN和串口的区别,以及它和RS485的相似之处。 1、“多主机”特性 在CAN网络通讯中,无需其它设备同意,每个CAN设备都可以主动向外发送数据,且所有设备都会收到数据&#xff0c…

【面试干货】 非关系型数据库(NoSQL)与 关系型数据库(RDBMS)的比较

【面试干货】 非关系型数据库(NoSQL)与 关系型数据库(RDBMS)的比较 一、引言二、非关系型数据库(NoSQL)2.1 优势 三、关系型数据库(RDBMS)3.1 优势 四、结论 💖The Begin…

孵化器补贴政策提问模板

对于一些需要创业的人来说,找场地是非常非常难的,一个好的场地能够提高创业的成功率,下面这些内容对于孵化器产业园的政策有一个好的提问,可以帮助你们了解这个孵化器合不合适。需要创业的人可以收藏 某孵化器政策示例 提问模板 …

源代码先转字节码,再转机器码的过程

编程语言分类 1. 机器语言 直接使用 (101010) 二进制指令去编写程序, 等于 直接操作硬件优点 : 最底层, 离计算机最近, 执行速度快缺点 : 复杂难记, 开发效率最低, 2. 汇编语言 用英文标签代替一组二进制指令, 本质上仍然是 直接操作硬件优点 : 比较底层, 执行速度最快缺点 …

【竞技宝】欧洲杯:德国被乌克兰逼平,27脚射门仍难得分!

欧洲杯前的热身赛已经全面开启,东道主德国队算是打响了热身赛的第一枪,只可惜他们在主场0比0被乌克兰逼平。整场比赛,德国队都占据明显优势,全场比赛轰出27脚射门,可是却无法实现破门。这个时候德国球迷似乎回想到了前两届世界大赛,球队被“锋无力”支配的恐惧。 本场比赛德国队…

如何制作Peppol文件?

Peppol (Pan-European Public Procurement Online) 是一种用于跨境电子采购的标准协议和网络。它允许企业和政府机构以电子方式交换文件,如电子发票、订单和发货单。如果你需要制作Peppol文件,可以参考如下步骤: 准备必要工具和资源 1.Pepp…

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件 Affinity Designer 2, Affinity Photo 2, Affinity Publisher 2 请访问原文链接:Serif Affinity 2.5 (macOS, Windows) - 专业创意软件,查看最新版。原创作品,转载请保留出处。 作者主…

C语言什么打开⽂件后要及时关闭?

一、问题 对⽂件读写之前,需要使⽤ fopen( ) 函数打开该⽂件:在使⽤完⽂件后,需要及时关闭⽂件。那么,为什么要及时关闭⽂件呢? 二、解答 ⽂件打开的过程是将存放在磁盘等外部设备上的⽂件读⼊到内存中,以…

【第二节】C/C++数据结构之线性表

目录 一、线性表基本说明 1.1 基本概念 1.2 抽象数据类型 1.3 存储结构 1.4 插入与删除的区别 1.5 顺序存储和链式存储的优缺点 二、链表 2.1 基本概念 2.2 抽象数据类型 2.3 单链表的定义 2.4 单链表的基本操作 2.5 单链表模板形式的类定义与实现 三、单向循环链…

项目迭代中新老逻辑切换入口

前言 ​ 日常我们在项目开发中经常会进行项目迭代,比如说开发初期设定的代码逻辑根据功能需求迭代逐渐发现越来越难用,或者改动是对整体较大时,往往会进行专项处理,对这个逻辑进行改造。 ​ 那么就会涉及到原先被调用方切换接口…

成功解决“ModuleNotFoundError: No module named ‘tensorflow_datasets‘”错误的全面指南

成功解决“ModuleNotFoundError: No module named ‘tensorflow_datasets’”错误的全面指南 在Python编程和深度学习项目中,tensorflow_datasets(通常简称为tfds)是一个非常重要的库,它提供了大量现成的数据集,方便…

终于来啦!Stable Diffusion 3将在6月12日正式开源

6月3日晚,著名开源大模型平台Stability AI的联合首席执行官Christian Laforte,在AMD的产品发布会上宣布,文生图模型 Stable Diffusion 3将于6月12日在Hugging Face开源权重。 本次开源的是Stable Diffusion 3的Medium模型,有20亿…

武汉盛势启创科技携手三品软件 EDM系统助力企业图文档数字化

客户简介 武汉盛势启创科技有限公司(以下简称“盛世启创”)是一家专注于新能源汽车零部件领域的科技型企业,其主要业务涵盖新能源汽车三电系统智能传感器、智能座舱及线控底盘控制器的芯片开发、硬件设计、嵌入式系统开发。以及相关产品的生产…

C++第二十三弹---深入理解STL中list的使用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、list的介绍 2、list的使用 2.1、构造函数 2.2、赋值操作符重载 2.3、迭代器使用 2.4、容量操作 2.5、元素访问 2.6、修改操作 2.7、其…