继承和深拷贝封装

继承和深拷贝封装

今日目标:

1.es5寄生组合式继承

2.es6类的继承

3.深拷贝函数封装

00-回顾

# 不同数据类型赋值时的区别:
`基本数据类型,赋的就是值,相互之间不再有任何影响`
`引用数据类型,赋的是地址,会造成数据共享的问题:其中一个改变了,另一个也会跟着改变`
`解决方案`: 浅拷贝和深拷贝# 浅拷贝
`概念`:对于引用类型的第一层,拷贝的是值;对于以后的层级(引用类型嵌套),拷贝的依然是地址
`语法`1. Object.assign({}, obj) || 2. {...obj}
`使用场景`: 引用类型数据的层级只有一级的时候# 深拷贝
`概念`: 无论引用类型数据的层级,拷贝的都是值
`语法`JSON.parse(JSON.stringify(obj))
`问题`JSON这个方式不支持undefined和函数; 会将正则变成空对象
`解决`: lodash库文件: 1. 导入lodash.js; 2. 使用_.cloneDeep(obj)

01-es5寄生组合式继承

# 属性的继承
`方法`: 在子构造函数内部通过call方法调用父构造函数:
`代码`function Son() {Father.call(this, 属性)
}
`原理`:子构造函数内部的this会指向s这个实例对象,通过在子构造函数内用call方法调用父构造函数,将父构造函数内部的this指向强制改变成了s这个实力对象,原本挂载到父构造函数身上的属性,自然就挂载到了s实例对象上了# 方法的继承
`方法`:强制将子构造函数的原型对象的隐式原型指向父构造函数的原型对象
`代码`Son.prototype = Object.create(Father.prototype)
`原理`:强制将子构造函数的原型对象的隐式原型指向父构造函数的原型对象,通过原型链关系图,子构造函数的实例对象就可以使用父构造函数原型对象上的方法
`Object.create(obj)`: 拷贝一个新对象,新对象的隐式原型会指向源对象# 手动将子构造函数的原型对象的构造器指回子构造函数本身
`代码`Son.prototype.constructor = Son

完整代码


function Father(chick, duck, sheep) {this.chick = chickthis.duck = duckthis.sheep = sheep
}Father.prototype.farm = function () {console.log('种田');
}function Son(chick, duck, sheep, pig) {// 注意:先继承再自有// 1. 属性的继承Father.call(this, chick, duck, sheep)// son自己的属性this.pig = pig
}// 2. 方法的继承:
// 注意:Son.prototype.__proto__ === Father.prototype: 子构造函数的原型对象的隐式原型指向了父构造函数的原型对象Son.prototype = Object.create(Father.prototype)Son.prototype.code = function () {console.log('敲代码');
}// 3. 手动将子构造函数的原型对象的构造器指回子构造函数本身
Son.prototype.constructor = Sonlet s = new Son('鸡', '鸭', '羊', '猪')
s.farm();
s.code();
console.log(s);// 构造器:指回构造函数本身
console.log(Son.prototype.constructor);

02-es6类的继承

`语法`class 子类 extends 父类 {constructor(属性) {// 属性的继承super(父类的属性)this.xxx = xxxx}
}`注意`1. 当使用了extends关键词的时候,就直接把父类的方法继承过来了2. 当子类有自己的属性时,必须先继承,再自有3. 静态方法属于父类自己独有,不可以被实例对象使用,也不可以被继承`完整代码`class Father {// 构造器函数:绑定对象的属性constructor(chick, duck, sheep) {this.chick = chickthis.duck = duckthis.sheep = sheep}// 原型方法: 挂载到prototype原型对象上的方法farm() {console.log('种田');}// 静态方法:构造函数独有的方法,不可以被实例对象使用,也不可以被继承static dmj() {console.log('打麻将');}}// 类的继承:extends: 子类 extends 父类 {}
class Son extends Father {constructor(chick, duck, sheep, pig) {// 注意:先继承再自有// 属性的继承:super关键字实现: super(需要继承的属性,...)super(chick, duck, sheep)// pig: Son自有的属性this.pig = pig}// 子类自己的原型方法code() {console.log('敲代码');}
}let s = new Son('鸡', '鸭', '羊', '猪')console.log(s);
// 1. 当使用了extends关键词的时候,就已经把父类的原型方法继承过来的
s.farm()
s.code()
s.dmj()

03-深拷贝函数的封装【笔试题】

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

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

相关文章

LeetCode 每日一题 2024/3/18-2024/3/24

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 3/18 303. 区域和检索 - 数组不可变3/19 1793. 好子数组的最大分数3/20 1969. 数组元素的最小非零乘积3/21 2671. 频率跟踪器3/22 2617. 网格图中最少访问的格子数3/23 254…

OpenJudge - 02:找第一个只出现一次的字符

总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 输入 一个字符串,长度小于100000。 输出 输出第一个仅出现一次的字符,若没有则输出no。 样例输…

LeetCode-热题100:22. 括号生成

题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入: n 3 输出: [“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2:…

python内置函数 S

python内置函数 S Python 解释器内置了很多函数和类型,任何时候都能使用。 S 名称描述set创建一个集合。setattr设置对象的属性值。slice创建切片对象。sorted对可迭代对象(如列表、元组等)进行排序,并返回一个新的已排序列表。…

面试算法-78-两两交换链表中的节点

题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出&#xff…

Filter介绍使用案例

文章目录 一、Filter概念二、Filter快速入门定义类,实现Filter接口,并重写其所有方法 三、Filter执行流程四、Filter使用细节1、Filter拦截路径配置2、过滤器链 五、案例 一、Filter概念 二、Filter快速入门 定义类,实现Filter接口&#xff0…

paddlepaddle框架构建数据集进行分类问题的时候,会发现数据集在构建的过程中不会构建标签(花分类)

问题描述 在做一个paddlepaddle项目的时候,需要使用神经网络对他进行分类,数据集的结构如下图,这时候我们可以使用常用dataset方法对数据集进行构建。 这时候我们就会发现一个问题,就是这个矿建不是构建标签,也就是说…

数据格式化方法

首先你需要一个可以展示代码的组件; 我使用的是tech-ui(内部组件库); 你如果没有类似的组件,可以参考以下链接替代: react-monaco-editor -- 代码编辑器(适用Umi)_umi monaco editor-CSDN博客 Codemirror -- 代码编辑器(react…

linux修改ftp上传路径

命令行三行即可,假如我想把上传的视频配置到nginx的文件目录下, #修改指定用户的指定文件目录 usermod -d /home/nginx/www/images ftpuser # #给权限 chown -R ftpuser:ftpuser /home/nginx/www/images #重启 systemctl restart vsftpd.service顺便…

洛谷B3626 跳跃机器人

#先看题目 题目描述 地上有一排格子,共 n 个位置。机器猫站在第一个格子上,需要取第n 个格子里的东西。 机器猫当然不愿意自己跑过去,所以机器猫从口袋里掏出了一个机器人!这个机器人的行动遵循下面的规则: 初始时…

【项目设计】仿 muduo 库实现 OneThreadOneEventLoop 式并发服务器

文章目录 一、项目介绍1. 项目简介2. 开发环境3. 核心技术4. 开发阶段 二、前置知识了解1. reactor2. timerfd3. timerwheel4. eventfd5. regex6. any 三、框架设计1. 项目模块划分1.1 SERVER 模块1.2 协议模块 2. 项目模块关系图2.1 Connection 模块关系图2.2 Acceptor 模块关…

ubuntu安装可调试的ffmpeg

安装相关库 # 安装gcc等编译工具链的相关包 sudo apt install g++ nasm yasm pkg-config # SDL2库 sudo apt-get install libsdl2-2.0 libsdl2-dev # 编解码相关库和工具 sudo apt install libx264-dev libx265-dev libdc1394-22-dev libv4l-dev libmp3lame-dev 1、下载ffmpeg源…

滑动窗口:流量控制的有效手段

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

HarmonyOS系统开发ArkTS常用组件文本及参数(五)

目录 一、Text组件 1、Text组件案例 二、Text组件参数 1、string字符串类型 2、Resources类型 2.1、resources中内容配置 base/element/string.json 中的内容 zh_US/element/string.json 中的内容 es_US/element/string.json 中的内容 2.2、环境适配 适配英文 适配中文…

【Bug】记录2024年遇到的Bug以及修复方案

--------------------------------------------------------分割线 2024.3.22------------------------------------------------------- 1、load_sample_image raise AttributeError(“Cannot find sample image: %s” % image_name) AttributeError: Cannot find sample ima…

Linux--Ubuntu安装【保姆级教程】

Linux操作系统时程序员必须要学的操作系统。接下来我们就来看一下Linux操作系统是如何安装的 我们在 Vmware 虚拟机中安装 linux 系统,所以需要先安装 vmware 软件,然后再 安装 Linux 系统。 一.所需安装文件: Vmware 下载地址(现在最新版的…

springboot+vue考试管理系统

基于springboot和vue的考试管理系统 001 springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的在线考试管理系统,采用M(model)V(view)C(controller)三层体系结构&…

【JS】for in可能遇到的问题

问题一:for in 打印属性顺序与定义顺序不一致 先来做一道题,请说出打印结果 const obj {a2: aaa,2: aaa,1: aaaa,a1: aaa, }for(let key in obj){console.log(key) }结果: 1 2 a2 a1 属性的书写顺序不一定就是对象遍历时的顺序。这涉及到…

【2】华为交换机如何修改Web登录密码?

0x01 问题描述 如果忘记了Web登录密码或者希望修改Web登录密码&#xff0c;用户可以通过Console口、STelnet或Tenet等方式登录交换机后设置新的Web登录密码。 使用Telnet协议存在安全风险&#xff0c;建议使用Console囗或STelnet V2登录设备 0x02 问题解决 <HUAWEI> s…

【leetcode热题】打家劫舍

难度&#xff1a; 简单通过率&#xff1a; 40.6%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防…