ECMA6Script学习笔记(五)

news2024/11/25 11:01:24

【摘要】 本文是对自己学习ES6的学习笔记回顾,后面是概要: 本文介绍了ES6中的对象创建和拷贝方法。对象创建方面,ES6通过class关键字支持了面向对象的语法糖,包括属性设置、getter和setter方法、构造器、静态方法以及私有属性的定义。同时,展示了如何通过extends关键字实现类的继承。对象拷贝方面,区分了浅拷贝和深拷贝的概念,并通过示例代码演示了如何使用解构赋值和JSON转换实现深拷贝.

原创声明:文章首发地址:https://bbs.huaweicloud.com/blogs/431975,本文是由本作者在华为云社区的首发后搬运而来,不存在抄袭.

Es6的对象创建和拷贝

1 对象创建的语法糖

ES6中新增了对象创建的语法糖,支持了class extends constructor等关键字,让ES6的语法和面向对象的语法更加接近,基本和Java等面向对象语言的语法一致

1.1基本属性设置和方法调用

下面是一些在开发过程中的基础调用与属性设置,基本和其他开发语法的设置基本类似,因为本人学习过python和js的所以更容易理解和使用下面的语法

 class Person{
            //增加属性
            n;
            age;
            //getter setter 写法和java基本一致
            get name(){
                console.log(this)
                console.log("getter")
                return this.n;
            }
            set name(n){
                console.log("setter");
                this.n = n;
            }
        }
        //创建一个新对象进行调用
        let person = new Person();
        //直接访问属性赋值
        person.n="张三";
        console.log(person);
        //调用setter方法
        person.name="李四";
        console.log(person);
        // 直接访问属性值
        console.log(person.n)
        //调用getter方法
        console.log(person.name)

image.png

1.2 一些方法的调用和设置

对构造器的设置主要是应用constructor这个关键字来创建,静态方法的使用也和java的基本类似,通过代码加效果展示很容易理解

class Person{
            //增加属性
            n;
            age;
            //getter setter 写法和java基本一致
            get name(){
                console.log(this)
                console.log("getter")
                return this.n;
            }
            set name(n){
                console.log("setter");
                this.n = n;
            }
            //实例方法
            eat(food){
                //使用模板字符串
                console.log(`${this.age}岁的${this.n}正在吃${food}`)
            }
            //静态方法
            static sum(a,b){
                return a+b;
            }
            //构造器
            constructor(name,age){
                this.n = name;
                this.age = age;
            }
        }
        //创建一个新对象进行调用
		//调用构造器来设置类的属性
        let person = new Person("小李",18);
        //调用实例方法
        person.eat("麻辣烫");
        //调用静态方法
        //静态方法要用类来调用
        console.log(Person.sum(10,20));
1.3 设置私有属性以及访问

通过变量前加#来设置私有属性,作用和java中的private效果是一样的

  class Person{
            //增加属性
            //在属性前增加#和java中在属性前加private效果是一致的
            #n;
            age;
}

在属性前加上#后代表#和属性变为一个整体

 class Person{
            //增加属性
            #n;
            age;
            //getter setter 写法和java基本一致
            get name(){
                console.log(this)
                console.log("getter")
                return this.#n;
            }
            set name(n){
                console.log("setter");
                this.#n = n;
            }
            //实例方法
            eat(food){
                //使用模板字符串
                console.log(`${this.age}岁的${this.#n}正在吃${food}`)
            }
            //静态方法
            static sum(a,b){
                return a+b;
            }
            //构造器
            constructor(name,age){
                this.#n = name;
                this.age = age;
            }
        }
        //访问私有属性
        let person = new Person("小李",18);
        console.log(person.#n); //直接调用无法访问
		//可以通过调用getter和setter方法进行访问
        console.log(person.name); 

出现private无法访问的报错
image.png
正确访问
image.png

1.4 继承父类的方法和属性

和java等面向对象的语法基本一致,使用起来也比较简单,父继承子

class Person{
            //增加属性
            #n;
            age;
            //getter setter 写法和java基本一致
            get name(){
                console.log(this)
                console.log("getter")
                return this.#n;
            }
            set name(n){
                console.log("setter");
                this.#n = n;
            }
            //实例方法
            eat(food){
                //使用模板字符串
                console.log(`${this.age}岁的${this.#n}正在吃${food}`)
            }
            //静态方法
            static sum(a,b){
                return a+b;
            }
            //构造器
            constructor(name,age){
                this.#n = name;
                this.age = age;
            }
        }
class Student extends Person{
            score;
            //定义实例方法
            study(){
                console.log(`${this.age}岁的${this.name}正在努力学习,考试获得了${this.score}`)
            }
            //通过构造器传入属性值
            constructor(name,age,score){
                super(name,age)
                this.score = score
            }
        }
        let stu = new Student("小李",18,100);
        stu.study();

通过下图所示,可以知道是调用了继承父类的set和get方法以及属性值

image.png

2 对象的深拷贝和浅拷贝

对象的拷贝,快速获得一个和已有对象相同的对象的方式

+ 2.1浅拷贝

      let arr = [1,2,3];
      let person ={name:'张三'}
      /* 浅拷贝 */
      //指向相同的内存,改变原始的值,拷贝的对象对应的值也会改变
      let arr2 = arr
      console.log(arr2);
      arr[0]=100
      console.log(arr2)

      let person2 = person;
      person.name="小黑"
      console.log(person);

image.png

+ 2.2 深拷贝

获取到一个和原数组这一类存储数据格式值一样的新数组

2.2.1 实现方式一:
      /* 深拷贝 */
      //方式1:使用解构表达式
      //相当于把其中的数据拿出来,然后放入一个新的数组
	  let arr = [1,2,3];
      let person ={name:'张三'}
      let arr2 = [...arr]
      console.log(arr2);
      //改原来的数组
      arr[0]=100
      console.log(arr2) //新数组数据不变

      let person2 = {...person};
       //改原来的对象属性
      person.name="小黑"
      console.log(person2);//新的对象属性不变

image.png

2.2.2 实现方式二:
//方式2:通过JSON和字符串的转换形成一个新的对象	 	
	  let arr = [1,2,3];
	  let person ={name:'张三'}
      //方式2:通过JSON和字符串的转换形成一个新的对象
      let person2 = JSON.parse(JSON.stringify(person));
       //改原来的对象属性
      person.name="小黑"
      console.log(person2);//新的对象属性不变

image.png

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

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

相关文章

Linux系统root账号密码破解(重置)

如果想不起root账号密码应该怎么做? 先关机再重新启动(重启虚拟机)做相关操作,开机时不能让服务器完全启动,需要把开机引导系统(GRUB)调出来 注:在实际生产环境中使用的Linux没有图…

四,系统规划

一,企业系统规划法BSP(2009、2010、2018,步骤以及优缺点、用到的工具) 企业系统规划法(Business Systems Planning,BSP)是IBM公司20世纪70年代提出的一种结构化的信息系统规划方法。该方法通过…

Spring Cloud微服务项目公共类抽取

在微服务架构中,代码的重用性和维护性是非常重要的。Spring Cloud 提供了丰富的工具和框架来帮助我们构建和管理微服务应用,但随着项目规模的扩大,我们会遇到大量的重复代码和相似的逻辑。在这种情况下,抽取公共类成为提高代码质量…

回归测试:保障软件质量的利器

目录 前言1. 回归测试的概念1.1 定义1.2 目标 2. 回归测试的主要作用2.1 确保系统稳定性2.2 提高软件质量2.3 节省维护成本 3. 回归测试在整个测试中的地位3.1 单元测试阶段3.2 集成测试阶段3.3 系统测试阶段3.4 验收测试阶段 4. 回归测试的主要工具4.1 Selenium4.2 JUnit4.3 J…

《Redis设计与实现》读书笔记-数据结构(SDS)

目录 SDS定义 SDS结构 SDS与C字符串结构差异 SDS优点 SDS扩容策略 SDS惰性空间回收 SDS定义 SDS(简单动态字符串),用于代替C语言自身的字符串(字符容量与字符数组强相关)。 SDS结构 sdshdr{int free //sds 中…

预警系统最小例程构建

预警系统最小例程构建 引言 为了更直观, 我们使用最小例程来实现这个预警流程, 环境温湿度读取,然后判断阈值, 超标则触发小灯警报。 最小例程工程备份链接: https://ww0.lanzoul.com/iz4wd261k21i 仿真文件工程备份链接: https://ww0.lanzoul.com/i8vTn261syyb 文章目录…

Jeecgboot仪表盘设计器使用https时访问报错

问题 仪表盘设计器设计好后,Nginx配置域名发送https请求时,/drag/page/queryById、/drag/page/addVisitsNumber仍发送http请求。导致发送下面错误: 原因 仪表盘设计器里设计的页面是由后端生成返回给前端的,后端是根据后端服…

docker安装elasticsearch(es)最新版本

docker安装elasticsearch(es) docker官网 https://hub.docker.com/ https://www.cnblogs.com/balloon72/p/13177872.html 1、拉取最新项目elasticsearch docker pull elasticsearch:8.14.3lscpu 查看架构 2、构建环境 mkdir -p /data/elasticsear…

【TOOLS】Project 2 Maven Central

发布自己的项目到maven中央仓库 Maven Central Account 访问:https://central.sonatype.com/,点击右上角,根据提示注册账号 构建User token ,用于访问中央仓库的API: 点击右上角,查看账户点击Generate Us…

医院体检信息管理系统,C#体检系统源码,健康体检系统PEIS

体检服务全流程 检前 检前注意事项提醒-体检预约-套餐选择-体检签到-费用缴纳 检中 科室队列提醒-增项检中支付 检后 报告查询-体检百科-报告解读-问卷调查 体检管理系统模块介绍 一、登记管理模块 登记体检者基本信息,包括唯一的体检编号,姓名、…

Windows 10+Visual Studio2019 Opencv-C++安装配置

前往官网下载需要的版本Releases - OpenCVhttps://opencv.org/releases/ 1.下载并解压OpenCV 我选择4.6.0,点击windows版本,进行下载 2.配置项目属性 打开你的Visual Studio 2019项目 -> 右击项目名,选择“属性” 注:整个配…

【C语言】指针基础知识理解【续】

1. ⼆级指针 指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥?这就是 ⼆级指针 。 1.1 引入二级指针 由于一级指针已经很熟悉,这里就不再赘述,这里我们重点探讨二级指针 下面先简单使用一个二级指针看…

机器学习之——支持向量机(SVM)技术详解

机器学习之——支持向量机(SVM)技术详解 1. 支持向量机的基本原理1.1 超平面1.1.1 定义与作用1.1.2 高维空间中的超平面 1.2 间隔最大化1.2.1 间隔的定义1.2.2 最大化间隔的原则 1.3 支持向量1.3.1 支持向量的定义1.3.2 支持向量的作用 2. SVM的数学基础…

Vue3 加载条(LoadingBar)

效果如下图:在线预览 APIs LoadingBar 参数说明类型默认值必传containerClass加载条容器的类名stringundefinedfalsecontainerStyle加载条容器的样式CSSProperties{}falseloadingBarSize加载条大小,单位 pxnumber2falsecolorLoading加载中颜色string‘…

快速识别音频文件转成文字

一、SenseVoice概述 阿里云通义千问开源了两款语音基座模型 SenseVoice(用于语音识别)和 CosyVoice(用于语音生成)。 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测,有以下特点: 多语言…

4000元投影仪性价比之王:爱普生TW5750极米RS10还是当贝X5S?

买投影很多人会倾向于买大品牌或者是销量最好的那几款,首先是大品牌售后更有保障,口碑和销量也间接证明了这款投影是否值得买。这几年国内投影市场中爱普生、极米、当贝这三家投影品牌无论是在产品、口碑、售后服务等方面都是最好的,被用户们…

深入理解 Go 数组、切片、字符串

打个广告:欢迎关注我的微信公众号,在这里您将获取更全面、更新颖的文章! 原文链接:深入理解 Go 数组、切片、字符串 欢迎点赞关注 前言 为什么在一篇文章里同时介绍数组、切片、字符串,了解这三个数据类型底层数据结构…

【人工智能专栏】Beam Search 束搜索

Beam Search 束搜索 这里是一个 beam_size=2 的Beam Search示意图,每个节点都会扩展5个下级节点,在 Beam Search 每次都会从所有扩展节点里面挑选出2个累计启发值最大的节点,直到达到结束标准。 理念 Beam Search 是对 Greedy Search(贪心搜索)的一个改进算法,能够扩展…

windows常用的dos命令

1.打开dos命令窗口: winr -> 输入cmd -> 回车 进入之后可以看到如下界面 其中 c: 代表盘符users: 代表的是磁盘符目录下的文件夹qayrup lin 是users文件夹下的子文件夹 以上的所有构成了我们当前操作的所在位置 常用的dos命令 作用命令切换盘符盘符名: -> 回车盘…

昇思25天学习打卡营第26天|Diffusion扩散模型

看了这个diffusion扩散模型,不得不感慨现在AI还是很厉害的。从一张包浆的图片,可以还原出来图片本来的面目,甚至可能一张打了马赛克的图片,用AI处理可能也可以还原出来原始图片。攻防战在AI加入战斗后又增加了很多变数。 受限于算…