ECMA6Script学习笔记(五)

【摘要】 本文是对自己学习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 = arrconsole.log(arr2);arr[0]=100console.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]=100console.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://xiahunao.cn/news/3281597.html

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

相关文章

专业做护眼灯的有哪些品牌?五款市面主流护眼灯专业测评

专业做护眼灯的有哪些品牌?市面上出现的品牌毫不夸张的说,真的算得上是琳琅满目,而且每一个品牌都在说自己的产品才是最值得的,这种情况下来,很多人一时之间根本就不知道要选择哪一款比较好。而且还有一些还会买到低劣…

vue基础知识总结(2)--- axios的使用

一.下载Vue3: 选择自己想要下载的项目文件夹,cmd回车打开命令栏,执行 : cnpm init vuelatest 然后等待一会就可以创建一个项目,并更改项目名: √ 请输入项目名称: ... vue-project 之后按照…

华为仓颉语言测试申请

1. 申请网址 HarmonyOS NEXT仓颉语言开发者预览版 Beta招募- 华为开发者联盟 点击立即报名登录华为账号 勾选选项 , 点击同意 按要求填写信息即可 2. 申请通过后官方会通过邮件的方式发送相关下载途径 , 根据文档进行下载即可 package Cangmain(): Int64 {println("你…

AI技术修复奥运珍贵历史影像,《永不失色的她》再现百年奥运女性光彩

Greatness of HER ! AI致敬 , 了不起的「她」。 7月25日,在国际奥委会和各方力量的支持下,阿里云以AI技术修复奥运珍贵历史影像,让百年奥运女性的伟大光彩被看见,并在巴黎推出《永不失色的她》全球首映礼。 国际奥委会…

Graph Contrastive Learning via Interventional View Generation

发表于:WWW24 推荐指数: #paper/⭐⭐ 框架与动机: 整体框架 动机: 如上四个: b.HLCL 生成随机增强视图,并分别用高通过滤器和低通过滤器过滤 c.生成同配异配视图,都用低通过滤器 d.生成同配视图异配视图,同配视图用低通过滤器,异配视图用高通过滤器 通过图d,我们可以得出:d&g…

基于Material studio拉伸-断裂过程的Perl脚本

在材料科学的研究中,拉伸-断裂过程一直是科学家们探索的焦点。这一过程涉及复杂的力学行为和材料内部微观结构的变化,对于理解材料的性能至关重要。然而,传统的实验方法不仅耗时耗力,而且难以捕捉到微观尺度上的所有细节。 为了满…

网站如何实现HTTPS访问

要实现网站通过HTTPS协议访问,主要依赖于为网站部署SSL/TLS证书。 SSL(Secure Sockets Layer)是用于在互联网上加密数据传输的安全协议。部署了SSL证书之后,网站就可以通过HTTPS(超文本传输安全协议)来提供…

C# Unity 面向对象补全计划 之 初识继承方法与多态

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列旨在通过补全学习之后,给出任意类图都能实现并做到逻辑上严丝合缝 1.继承方法 C# & Unity 面向对象补全计划 之 继承(字段与属性&…

Java真人版猫爪老鼠活动报名平台系统

🐾“真人版猫爪老鼠活动报名平台系统”——趣味追逐,等你来战!🐭 🐱【萌宠变主角,现实版趣味游戏】 厌倦了电子屏幕的虚拟游戏?来试试“真人版猫爪老鼠活动”吧!在这个平台上&…

PHP进阶-CentOS7部署LNMP服务架构的项目

在开发和部署Web应用时,LNMP(Linux、Nginx、MySQL、PHP)的组合是非常常见的。这篇博客将介绍如何通过一个简单的脚本,在CentOS 7上部署LNMP,并将PHP项目自动部署到服务器上。这不仅可以节省大量的时间,还能…

一个接口未做超时处理,引发数据库hang了

前言 在代码开发过程中,你是否会经常遇到以下问题? 数据库连接被瞬间占用,出现性能瓶颈 系统资源被大量占用,出现锁等待或性能下降 事务日志大量增长 上述这些状况的出现可能是未提交事务引发的。该类事务开启后,…

什么是五力分析?5分钟带你了解它在企业财务经营中的应用与价值!

如今,随着全球化进程的不断加速,市场环境复杂多变,市场竞争日益激烈,财务经营已经成为了企业应对复杂市场环境、保持自身竞争力的关键。体系化的五力分析平台能够为企业提供一套全面的解决方案,帮助企业在盈利能力、偿…

【随机链表的复制】python刷题记录

R3-哈希表 参考k神题解 哈希表法: """ # Definition for a Node. class Node:def __init__(self, x: int, next: Node None, random: Node None):self.val int(x)self.next nextself.random random """class Solution:def copy…

Java红娘相亲交友平台系统源码小程序

💕遇见真爱,从“红娘相亲交友平台系统”开始!👫 🌹【精准匹配,缘分不再擦肩而过】 还在为茫茫人海中找不到那个TA而烦恼吗?“红娘相亲交友平台系统”利用先进的大数据分析技术,根据…

电脑怎么压缩图片?6个简单实用的压缩方法分享(无损压缩)

电脑怎么压缩图片?面对电脑较大的图片,小编是建议大家进行压缩的。文件过大容易影响电脑存储空间,而且还不容易上传和传输。图片压缩有很多方法可以有效解决,简单几步就能将图片压缩变小,下面是相关的介绍,…

web期末大作业家乡-浙江

代码下载: https://pan.quark.cn/s/2e157769c4ad

android动态权限申请并告知权限申请的使用目的

随着工信部对APP的一系列整治,现在要求APP在申请相机、位置等敏感权限时需要向用户同步告知权限申请的使用目的。个大应用市场在APP上线审核中也会重点检查这项要求。 从Android 6.0开始,对于敏感权限的获取,APP需要调用系统提供的动态申请权…

借银行的贷款去还网贷,可以吗?

近日,有很多网友问我,他们申请的公积金贷款,能不能用这笔钱来还清信用卡和网贷,但又怕这么做会违法,或者银行会突然要求他提前还贷。 首先,放心,这么做不违法。但银行确实不太鼓励这么用贷款&am…

【扒模块】DFF

图 医学图像分割任务 代码 import torch import torch.nn as nnfrom timm.models.layers import DropPath # 论文:D-Net:具有动态特征融合的动态大核,用于体积医学图像分割(3D图像任务) # https://arxiv.org/abs/2403…

嵌入式开发问题总汇

1. 事情经过:有天快下班的时候,我们采购经理找到我,说,生成的bin文件通过软件上传烧录时,烧录就会重启,但是其他的板子就不会。最后他换了一个A厂家的flash芯片,就可以了。但是,B厂…