ES6 课程概述③

news2024/11/24 0:31:16

文章目录

  • 5-1. 新增的对象字面量语法
  • 5-2. Object 的新增 API
  • 5-4 类:构造函数的语法糖
    • 传统的构造函数的问题
    • 类的特点
  • 5-5. 类的其他书写方式

5-1. 新增的对象字面量语法

  1. 成员速写

如果对象字面量初始化时,成员的名称来自于一个变量,并且和变量的名称相同,则可以进行简写

function createUser(loginId, loginPwd, nickName) {
  const sayHello = function () {
    console.log("loginId", this.loginId, "nickname", this.nickName);
  };
  return {
    loginId,
    loginPwd,
    nickName,
    sayHello,
    id: Math.random(),
  };
}
const u = createUser("abc", "123", "aaa");
  1. 方法速写

对象字面初始化时,方法可以省略冒号和 function 关键字

  1. 计算属性名

有的时候,初始化对象时,某些属性名可能来自于某个表达式的值,在 ES6,可以使用中括号来表示该属性名是通过计算得到的。

const prop1 = "name2";
const prop2 = "age2";
const prop3 = "sayHello2";

const user = {
  [prop1]: "姬成",
  [prop2]: 100,
  [prop3]() {
    console.log(this[prop1], this[prop2]);
  },
};

user[prop3]();

console.log(user);

5-2. Object 的新增 API

  1. Object.is

用于判断两个数据是否相等,基本上跟严格相等(===)是一致的,除了以下两点:

  1. NaN 和 NaN 相等
  2. +0 和-0 不相等
  1. Object.assign

用于混合对象

  1. Object.getOwnPropertyNames 的枚举顺序

Object.getOwnPropertyNames 方法之前就存在,只不过,官方没有明确要求,对属性的顺序如何排序,如何排序,完全由浏览器厂商决定。

ES6 规定了该方法返回的数组的排序方式如下:

  • 先排数字,并按照升序排序
  • 再排其他,按照书写顺序排序
  1. Object.setPrototypeOf

该函数用于设置某个对象的隐式原型

比如: Object.setPrototypeOf(obj1, obj2),
相当于: ` obj1.__proto__ = obj2 `

5-4 类:构造函数的语法糖

传统的构造函数的问题

  1. 属性和原型方法定义分离,降低了可读性
  2. 原型成员可以被枚举
  3. 默认情况下,构造函数仍然可以被当作普通函数使用
// 构造函数  构造器
function Animal(type, name, age, sex) {
  this.type = type;
  this.name = name;
  this.age = age;
  this.sex = sex;
}

// 定义实例方法(原型方法)
Animal.prototype.print = function () {
  console.log(`【种类】:${this.type}`);
  console.log(`【名字】:${this.name}`);
  console.log(`【年龄】:${this.age}`);
  console.log(`【性别】:${this.sex}`);
};

const a = new Animal("狗", "旺财", 3, "男");
a.print();

for (const prop in a) {
  console.log(prop); //原型成员可以被枚举
}

在这里插入图片描述

// 类对照写法
class Animal {
  constructor(type, name, age, sex) {
    this.type = type;
    this.name = name;
    this.age = age;
    this.sex = sex;
  }

  print() {
    console.log(`【种类】:${this.type}`);
    console.log(`【名字】:${this.name}`);
    console.log(`【年龄】:${this.age}`);
    console.log(`【性别】:${this.sex}`);
  }
}

类的特点

  1. 类声明不会被提升,与 let 和 const 一样,存在暂时性死区
  2. 类中的所有代码均在严格模式下执行
  3. 类的所有方法都是不可枚举的
  4. 类的所有方法都无法被当作构造函数使用
  5. 类的构造器必须使用 new 来调用

5-5. 类的其他书写方式

  1. 可计算的成员名
const printName = "print"; //可计算的成员名

class Animal {
  constructor(type, name, age, sex) {
    this.type = type;
    this.name = name;
    this.age = age;
    this.sex = sex;
  }

  //创建一个age属性,并给它加上getter,读取该属性时,会运行该函数
  get age() {
    return this._age + "岁";
  }

  //创建一个age属性,并给它加上setter,给该属性赋值时,会运行该函数
  set age(age) {
    if (typeof age !== "number") {
      throw new TypeError("age property must be a number");
    }
    if (age < 0) {
      age = 0;
    } else if (age > 1000) {
      age = 1000;
    }
    this._age = age;
  }

  [printName]() {
    //可计算的成员名
    console.log(`【种类】:${this.type}`);
    console.log(`【名字】:${this.name}`);
    console.log(`【年龄】:${this.age}`);
    console.log(`【性别】:${this.sex}`);
  }
}

var a = new Animal("狗", "旺财", 3, "男");
a[printName](); //可计算的成员名

Animal.abc = 123;
  1. getter 和 setter

Object.defineProperty 可定义某个对象成员属性的读取和设置

使用 getter 和 setter 控制的属性,不在原型上

  1. 静态成员

构造函数本身的成员

//静态成员与实例成员的区别
Animal.abc = 123;

const a = new Ainmal(“狗”, “旺财”, 3, “男”);

//abc 不能通过 a 来访问,只能通过构造函数的本身访问
//a 只能访问本的实例成员和原型的实例成员

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用 static 关键字定义的成员即静态成员

class Chess {
  constructor(name) {
    this.name = name;
  }

  static width = 50;

  static height = 50;

  static method() {}
}
//静态成员
console.dir(Chess);
Chess.method();
//实例成员
const chess = new Chess();
console.dir(chess);

在这里插入图片描述

  1. 字段初始化器(ES7)

注意:

1). 使用 static 的字段初始化器,添加的是静态成员
2). 没有使用 static 的字段初始化器,添加的成员位于对象上
3). 箭头函数在字段初始化器位置上,指向当前对象

  1. 类表达式

  2. [扩展]装饰器(ES7)(Decorator)

横切关注点

装饰器的本质是一个函数

5-6. 类的继承
如果两个类 A 和 B,如果可以描述为:B 是 A,则,A 和 B 形成继承关系

如果 B 是 A,则:

B 继承自 A
A 派生 B
B 是 A 的子类
A 是 B 的父类
如果 A 是 B 的父类,则 B 会自动拥有 A 中的所有实例成员。

新的关键字:

extends:继承,用于类的定义
super
直接当作函数调用,表示父类构造函数
如果当作对象使用,则表示父类的原型
注意:ES6 要求,如果定义了 constructor,并且该类是子类,则必须在 constructor 的第一行手动调用父类的构造函数

如果子类不写 constructor,则会有默认的构造器,该构造器需要的参数和父类一致,并且自动调用父类构造器

【冷知识】

用 JS 制作抽象类
抽象类:一般是父类,不能通过该类创建对象
正常情况下,this 的指向,this 始终指向具体的类的对象

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

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

相关文章

2023/01/05 java面试题每日10问

1.What is Java? Java is object-oriented, platform-independent, Multithreaded, and portable programming language.it provides its own JRE and API. 2.What is the difference between JDK, JRE, and JVM? JVM Java Virtual Machine provides the runtime environm…

小小闭门会,揭示SaaS大趋势

从2014年中国的SaaS领域开始有融资到现在已经8年&#xff0c;从最开始的一张云图填不满到现在的密密麻麻&#xff0c;厂商和产品如雨后春笋般的多了起来&#xff0c;但很多SaaS依然在孤军奋战&#xff0c;很多厂商陷入定制化泥潭。有人说中国的SaaS有特殊国情&#xff0c;大企业…

【bioinfo】酶切法片段化建库相比超声打断建库引入softclip使用FADE软件识别/去除

FADE软件参考文献 参考文献&#xff1a;片段化酶诱导的双链伪影的表征和缓解 - PMC (nih.gov) 文献提供的酶切产生的错误识别和去除软件FADE&#xff1a;软件git地址 文献补充材料图&#xff1a;由酶切产生的人工错误序列的碱基质量值偏高&#xff0c;相对其他softclip的质量…

适配Dell R750xs server Broadcom BCM57412 NetXtreme-E 10Gb SFP+ 网卡

摘要 The Issue is to handle Scaler v8.2-385 (baf7f3a) on Dell R750xs server, the 10G NIC card is Broadcom BCM57412 NetXtreme-E 10Gb SFP. Firmware is the latest, but driver is not. The symptom is that only one port or no port could be recognized. After patc…

基于MAX7800羽毛板语音控制ESP8266小车

1. 项目介绍 基于MAX7800羽毛板语音控制ESP8266小车 采用现成的KWS20关键词&#xff0c;[up, down, left, right, stop, go, yes, no, on, off, one, two, three, four, five, six, seven, eight, nine, zero]&#xff0c;进行语音关键字识别远程控制小车。 2. 项目设计思路 搭…

JSP——EL表达式

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…

年度征文 | 回顾2022,展望2023 (清风与我)

个人简介&#xff1a; 名称内容个人主页清风与我学习方向主攻前端方向推荐学习vue&#xff0c;vue3&#xff0c;node.js&#xff0c;React&#xff0c;项目实战推荐学习用网站菜鸟教程&#xff0c;博客&#xff0c;哔哩哔哩 …学习用资源网vue&#xff0c;element&#xff0c;…

Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

文章目录1. 开放空间规划算法总体介绍1.1 Task: OPEN_SPACE_ROI_DECIDER1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER1.3 Task: OPEN_SPACE_TRAJECTORY_PARTITION1.4 Task: OPEN_SPACE_FALLBACK_DECIDER2. 基于混合A *的路径规划算法2.1 hybrid A*的简要思想2.2 RS曲线2.3 Apollo…

一文读懂方壳电池仓段差缺陷检测

摩根大通预计&#xff0c;2025年中国新能源汽车渗透率将达46.3%&#xff0c;彭博新能源财经最新发布的《新能源汽车市场长期展望》(EVO)报告显示&#xff0c;到2025年底&#xff0c;新能源汽车保有量将达到7700万辆&#xff0c;不难看出新能源行业依旧前景广阔。围绕“新能源”…

JDBC(Java Database connect)详解

一、相关概念 什么是JDBC JDBC&#xff08;Java Data Base Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准&#xff0c;据此可…

软件测试门槛低么?适合初学者么

随着软件工程活动的不断演化&#xff0c;软件测试工作已经成为了不可或缺的一部分&#xff0c;测试工作某种程度上是可以很大幅度提高软件的产品质量以及提升用户的使用满意度。因此&#xff0c;许多想要学习软件测试的朋友也许常常会有这样的困惑&#xff0c;软件测试门槛低吗…

JS数组对象——根据日期进行排序Date.parse(),按照时间进行升序或降序排序localeCompare()

JS数组对象——根据日期对象进行排序&#xff0c;按照时间进行升序或降序排序场景复现封装数组对象的排序方法根据日期和时间对象排序1、按照日期时间混合排序2、分别按照日期和时间进行排序场景复现 排序在项目中非常实用&#xff0c;出现频率极高&#xff0c;尤其是后台管理…

用javascript分类刷leetcode17.栈(图文视频讲解)

目录 Stack的特点&#xff1a;先进后出&#xff08;FILO&#xff09; 使用场景&#xff1a;十进制转2进制 函数调用堆栈 js里没有栈&#xff0c;但是可以用数组模拟 42/2 42%20 21/2 21%21 10/2 10%20 5/2 5%21 2/2 2%20 1/2 1%21 stack: [0,1,0,1,0,1] res: 1 0 1 …

VC#复习资料

一、选择题 2、“闪电”图标 3、using命名空间 命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式&#xff0c;using 关键字表明程序使用的是给定命名空间中的名称&#xff0c;使用 using 命名空间指令&#xff0c;这样在使用的时候就不用在前面加上命名空间名称…

golang学习

由于期末考试没时间学算法学了一波go放松一下 这可能是我学语言最认真的一次了&#xff08; 跟的是尚硅谷学完的 二倍速快进 折腾了一周左右 网络编程部分没看 因为不懂计网 不想学&#xff08; 虽然已经很老的课了 但是顺平老师雀氏讲的太细了也是听完了自己也没时间写笔记 …

QT5.14.2编译mysql-5.7.25 32位驱动办法

开发环境&#xff1a;Windows10QT5.14.2MySQL5.7.25 编译步骤&#xff1a; 1、下载安装mysql压缩包&#xff0c;下载地址为&#xff1a;https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.25-win32.zip 也可以打开MySQL :: Download MySQL Community Server (Archived Ve…

Electron主进程渲染进程间通信的四种方式

在electron中进程使用 ipcMain 和 ipcRenderer 模块&#xff0c;通过开发人员定义的“通道”传递消息来进行通信。新的版本中electron推荐使用上下文隔离渲染器进程进行通信&#xff0c;这种方式的好处是无需在渲染进程中直接使用ipcRenderer发送消息&#xff0c;这种在渲染进程…

JWT令牌入门

上篇文章我们写了如何登录&#xff0c;我们着重学习Token模式下的单点登录 一、访问令牌的类型 透明令牌&#xff0c;是客户端存储一段引用数字&#xff0c;然后到达服务器指向服务器中特定的令牌 类似于&#xff0c;cookie中存储了sessionId他们之间的关系 自包含令牌&#x…

猿代码超算实习生,五步助力拿到高薪offer

虽说行行出状元&#xff0c;但是一旦入错行&#xff0c;那就是一辈子的事。互联网的潮水已经退去&#xff0c;普通人再进入也只是勉强温饱。与其朝不保夕的被裁员&#xff0c;倒不如提前锁定未来30年的幸福。 20大以来&#xff0c;芯片国产化、超算&#xff08;先进计算&#…

docker的run,cmd,entrypoint分析和对比

写在前面 本文一起看下Dockerfile中经常用到的几个类似命令&#xff0c;RUN&#xff0c;CMD&#xff0c;ENTRYPOINT。 1&#xff1a;容器是怎么来的&#xff1f; 想要有容器我们就必须先创建镜像&#xff0c;而想要有镜像&#xff0c;我们则必须写一个用来描述想要创建的镜像…