深浅拷贝,类型检测及继承面试题

news2025/1/20 1:03:35

01 对象的深/浅拷贝

1.1 变量的存储

基本类型:基本类型的值存在栈内存中

引用类型: 引用类型的地址存储在栈内存中,他的值存储在堆内存中,通过指针(地址)连接

1.2 变量拷贝

基本类型:基本类型拷贝的是值

引用类型:引用类型拷贝的是变量的地址,会造成数据共享问题

1.3 变量的传递

基本类型: 基本类型传递的是值

引用类型: 引用类型传递的是地址,会造成数据共享问题

1.4 对象的浅拷贝

方法1:Object.assign({},需要拷贝的对象)

 const obj1 = Object.assign({}, obj) // Object.assign 需要传入第一个参数为空对象

方法2: for...in循环生成新的对象

    let obj1 = {} // 键名 : 键值
    for (const key in obj) {
        obj1[key] = obj[key]
    }
    console.log(obj1);

1.5 对象的深拷贝

方法1: JSON.parse(JSON.stringify(你需要拷贝的数据)) (能解决你98%的问题)

const obj1 = JSON.parse(JSON.stringify(obj))

方法2: lodash.js方法库 其中cloneDeep (能解决你100%的问题)

1.先下载  自己搜lodash官网
2.引入
<script src="./lodash.min.js"></script>
3.使用lodash方法库里面的一个叫做深克隆的方法 cloneDeep  (_就代表loadsh实例对象)
​
const obj1 = _.cloneDeep(obj)
​
// 注意:防抖函数 、 节流函数
​

2.0 变量的类型检测

2.1 typeof -- 检测引用类型结果都为object

2.2 instanceof -- 检测变量是否为构造函数的实例对象

变量 instanceof 构造函数

缺陷:检测的变量是否为对象构造函数的实例时,结果都为true

 

2.3 Array.isArray() -- 检测是否为数组

Array.isArray('变量')

缺陷:只能检测数组

2.4 Object.prototype.toString.call() -- 检测所有的数据类型(不包括你自己的构造函数)

​
// 获取变量类型的最终解决方案 Object.prototype.toString
    const getType = Object.prototype.toString
    console.log(getType.call([]));
    console.log(getType.call({}));
    console.log(getType.call(new Date()));
    console.log(getType.call(new Error()));
​

课堂练习:

封装一个函数,传入你的变量,检测出类型,并且小写

3.0 ES5的继承 [背]

什么是继承?

子类继承父类的一切特征(属性和方法),子类也可以修改和追加属性和方法。

寄生组合式继承的实现方法:

1、子类继承父类的属性 : 父类.call(this,属性1,属性2)

2、子类继承父类原型上的方法 : 子类.prototype = Object.create(父类.prototype)

3、 修改子类原型对象中构造器(constructor)的指向 : 子类.prototype.constructor = 子类函数

4、最后再子类定义或修改自己的原型方法

    // 寄生组合继承的实现
    // 创建一个父类
    function Person(name, age, sex) {
        this.name = name
        this.age = age
        this.sex = sex
    }
    // 定义原型上的方法
    Person.prototype.say = function () {
        console.log(`${this.name}说了什么`);
    }
​
    // 创建一个子类
    function Student(name, age, sex, sid) {
        // 1、子类继承父类的属性
        Person.call(this, name, age, sex)
        this.sid = sid
    }
    // 2、子类继承父类原型上的方法
    Student.prototype = Object.create(Person.prototype)
    // 3、修改原型对象中构造器的指向
    Student.prototype.constructor = Student
    // 4、子类定义或修改自己的方法 
​
    Student.prototype.run = function () {
        console.log(`${this.name}跑起来了`);
    }
​
    const s1 = new Student('张三', 18, '女', '00001')
    console.log(s1);
    s1.say()
    // 每一个函数都有一个原型对象
    console.log(Student.prototype);
    // 每一个对象都有一个隐式原型,指向函数的显式原型
    console.log(s1.__proto__);
    // 原型对象都有一个构造器(constructor) 指向函数本身
​
    console.log(Student.prototype.constructor) // Person
​

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

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

相关文章

达梦数据库中,如何设置表的访问控制权限?

在工作中&#xff0c;大家都会遇到这样的场景&#xff0c;出于对数据库访问安全的考虑&#xff0c;对于某些用户我们不想让他们看到全库的表&#xff0c;只想给他们特定表的访问权限。那么在DM数据库中我们该如何去配置相应的权限呢&#xff1f; 我们下面来进行详细解析。 我们…

buuctf6

目录 [ACTF2020 新生赛]BackupFile [RoarCTF 2019]Easy Calc 利用PHP的字符串解析特性Bypass: http走私攻击 来首歌吧 荷兰宽带数据泄露​编辑 面具下的flag [ACTF2020 新生赛]BackupFile 1.打开环境 查看源代码得不到任何想要的信息&#xff0c;使用目录扫描来得到我们…

关于秒杀系统的一系列问题

阻塞队列怎么么实现&#xff1f;超卖问题&#xff1f;整体怎么实现&#xff1f; 5 设计一个秒杀系统 特点&#xff1a;高并发&#xff0c;请求量远大于库存量&#xff0c;只有少数能成功&#xff1b;逻辑比较简单&#xff0c;下单减库存&#xff1b; 设计理念&#xff1a;**限…

ESP8266基于Lua开发点灯示例

ESP8266基于Lua开发点灯示例 ✨基于ESPlorer IDE&#xff1a;https://github.com/4refr0nt/ESPlorer/releases&#x1f527;固件烧录工具&#xff1a;NodeMCU-PyFlasher&#x1f33f;esp8266烧录工具下载&#xff1a;https://github.com/marcelstoer/nodemcu-pyflasher/release…

LabVIEW CompactRIO 开发指南2 CompactRIO软件架构

第一章 CompactRIO软件架构 几乎所有的CompactRIO系统都至少有三个顶层VIs在三个不同的目标上异步执行:FPGA、实时操作系统(RTOS)和主机PC。如果开始软件开发时没有某种架构或流程图可供参考&#xff0c;那么可能会发现跟踪所有软件组件和通信路径是具有挑战性的。拥有一个在…

CentOS7上使用yum搭建LNMP架构并实现wordpress博客实战

前言 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是沐风晓月&#xff0c;阿里云社区博客专家&#x1f609;&#x1f609; &#x1f495; 座右铭&#xff1a; 先努力成长自己&#xff0c;再帮助更多的人 &#xff0c…

魔兽worldserver.conf 服务端配置文件说明

魔兽worldserver.conf 服务端配置文件说明 我是艾西&#xff0c;今天把很多小伙伴需要的魔兽worldserver.conf 服务端配置文件说明分享给大家&#xff0c;大家可以自己研究参考下 worldserver.conf 这个文件是服务端的配置文件&#xff0c;可以在这里做很多个性化修改 注意&a…

SpringSecurity跌坑指南

SpringSecurity跌坑指南 1&#xff0c;事情原委 这两天开始了毕业设计&#xff0c;但是突然发现自己的java方面的基础比较薄弱&#xff0c;于是决定自己从头到尾的开发一个java项目 要说跌的最惨的坑&#xff0c;莫过于springsecurity&#xff0c;如果你只是想要在项目里面配…

〖ChatGPT实践指南 - 零基础扫盲篇⑦〗- 基于 Python 实现的 OpenAI-Library 的简单使用

文章目录 ⭐ python 安装 OpenAI library⭐ 创建 openai.py 进行测试⭐ openai.Completion.create() 方法的小拓展 该章节我们呢来学习一下 OpenAI-Library 的使用&#xff0c;OpenAI-Library 是 OpenAI 官方给我们提供的各种开发语言的库&#xff0c;供我们使用。在前面的章节…

【无标题】基于matlab的长短期神经网络lstm的股票预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的股票预测 MATALB编程实现&#xff0c;附有代码 效果图 结果分析 展望 参考论文 背影 股票市场的波动十分巨大&#xff0c;由于一些不确定因素的影响&#xff0c;导致很难对股票进行投资盈利。因此&…

数据库 SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 解决方法

目录 一、错误提示信息&#xff1a; 二、原因分析&#xff1a; 三、解决方法&#xff1a; 四、执行完成结果&#xff1a; 五、重要说明 一、错误提示信息&#xff1a; 本文验证是数据库中的baiduAi_0258表无法通过select语句ID条件查询&#xff0c; 如执行 select * fro…

远程桌面,openGL

x11、xserver看另一篇博客 openGL是一种规范&#xff0c;用于绘制图像 OpenGL是Khronos Group开发维护的一个规范&#xff08;也就是提供了一种接口&#xff09;&#xff0c;它主要为我们定义了用来操作图形和图片的一系列函数的API&#xff0c;需要注意的是OpenGL本身并非API。…

vscode 配置有误导致的一次Linux 崩溃

一、问题描述 1. 要实现的功能 编写一个Linux 按键驱动&#xff0c;按下按键时&#xff0c;产生中断&#xff0c;在中断中启动定时器进行防抖处理。 2. 出现的问题 在中断处理函数中&#xff0c;调用 add_timer 函数设置定时器超时函数&#xff0c;并启动定时器。编写完驱动…

【消息队列】Apache Pulsar存储计算分离

前言 对于一个互联网项目来说&#xff0c;一般除了在语言层面的技术选型外&#xff0c;也会引入各种中间件&#xff0c;比如缓存、消息队列、搜索、NoSQL等&#xff0c;但是跳出语言层面来看的话&#xff0c;其实我们庖丁解牛之后&#xff0c;每个中间件都解决了特定的问题。 …

计组 作业九

作业9 题量: 36 满分: 100 作答时间:04-27 10:56至05-10 23:59 89.5分 一. 单选题&#xff08;共18题&#xff0c;39分&#xff09; 1. (单选题, 2分)Intel80486是32位微处理器,Core是______位微处理器。 A. 16B. 32C. 48D. 64 我的答案…

20.网络爬虫—Scrapy-Redis分布式爬虫

网络爬虫—Scrapy-redis详讲 Redis的安装与使用分布式概念和作用分布式爬虫分布式爬虫特点redis的使用Redis 操作/启动 Redis Desktop Manager下载特点和架构安装和使用Scrapy-redis 代码部署spider文件 settings文件 前言&#xff1a; &#x1f3d8;️&#x1f3d8;️个人简介…

wsl2使用open3d等进行图像绘制

在~/.bashrc文件中添加两个环境变量 export DISPLAY"grep nameserver /etc/resolv.conf | sed s/nameserver //:0" export LIBGL_ALWAYS_INDIRECT0 第一行是让wsl将openGL命令&#xff08;图形绘制命令&#xff09;输出到哪里&#xff0c;也就是x-server的位置&…

【Linux】指令(上)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;Linux ⭐代码仓库&#xff1a;Linux 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

机器学习在生态、环境经济学中的应用及论文写作

近年来&#xff0c;人工智能领域已经取得突破性进展&#xff0c;对经济社会各个领域都产生了重大影响&#xff0c;结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一&#xff0c;目前也在飞快的融入计量经济学研究。表面上机器学习通常使用大数据&#xf…

08_ThreadPool线程池

1. 架构说明 Java中的线程池是通过Executor框架实现的&#xff0c;该框架中用到了Executor&#xff0c;ExecutorService&#xff0c;ThreadPoolExecutor这几个类。 Executor接口是顶层接口&#xff0c;只有一个execute方法&#xff0c;过于简单。通常不使用它&#xff0c;而是…