当前位置: 首页 > news >正文

【Javascript】ES6新增之类的认识

在现代编程语言中,类是面向对象编程范式中的核心概念之一。
与函数类似,类本质上是一种特殊的函数,它允许我们将数据和操作封装在一起,以创建具有共同行为和状态的对象。
在类的世界里,我们有类表达式和类声明,它们各自具有自己的特性和用途。

✨ 类本质上是一种特殊的函数。所以和函数一样,有类表达式和类声明

类声明

函数不同,类声明不会被提升。这意味着在使用类之前,需要先进行类声明。类声明通常包括构造函数和其他成员方法。构造函数是一个特殊的方法,用于创建和初始化类所创建的对象。

// 类声明
class Rectangle {constructor(height, width) {this.height = height; // 实例成员this.width = width;}
}let p = new Rectangle();

类表达式

  • 类表达式可以命名,也可以不命名
  • 我们可以通过类的name属性来检索
// 未命名/匿名类
let Rectangle = class {constructor(height, width) {this.height = height;this.width = width;}
};
console.log(Rectangle.name);
// output: "Rectangle"// 命名类
// 命名类表达式的名称是该类体的局部名称。
let Rectangle = class Rectangle2 {constructor(height, width) {this.height = height;this.width = width;}
};
console.log(Rectangle.name);
// 输出:"Rectangle2"

类的定义

  • {}中的部分叫做类体。
  • 类体中会包括:
    • 构造函数

      • constructor方法是一个特殊的方法,这种方法用于创建和初始化一个由class创建的对象。
      • 注意⚠️:一个类体中只能有一个constructor方法
      • 使用 super 关键字来调用一个父类的构造函数
    • 原型方法

      class Rectangle {// constructorconstructor(height, width) {
      // 实例的属性必须定义在类的方法里this.height = height;this.width = width;}// Getterget area() {return this.calcArea();}// MethodcalcArea() {return this.height * this.width;}
      }
      const square = new Rectangle(10, 10);console.log(square.area);
      // 100
      
    • 静态方法

      • static来定义静态方法,只能被类访问
      class Point {constructor(x, y) {this.x = x;this.y = y;}static displayName = "Point";static distance(a, b) {const dx = a.x - b.x;const dy = a.y - b.y;return Math.hypot(dx, dy);}
      }const p1 = new Point(5, 5);
      const p2 = new Point(10, 10);
      p1.displayName;
      // undefined
      p1.distance;
      // undefinedconsole.log(Point.displayName);
      // "Point"
      console.log(Point.distance(p1, p2));
      // 7.0710678118654755
      
    • getter和setter

  • 类体中遵循严格模式

this指向

类中

  1. 类体中的成员方法遵循严格模式。this在类方法中的行为与传统函数有所不同。在调用静态或原型方法时,this默认指向undefined,但在非严格模式下,会自动装箱以保留传入状态。

  2. 当被调用时。谁调用,指向谁

    class Animal {
    // 原型方法speak() {return this;}
    // 静态方法static eat() {return this;}
    }let obj = new Animal();
    obj.speak(); // Animal {}
    let speak = obj.speak;
    speak(); // undefinedAnimal.eat(); // class Animal
    let eat = Animal.eat;
    eat(); // undefined
    

传统函数中

在非严格模式下调用函数,会发生自动装箱。即如果初始值时undefined,则this指向全局对象。

function Animal() {}Animal.prototype.speak = function () {return this;
};Animal.eat = function () {return this;
};let obj = new Animal();
let speak = obj.speak;
speak(); // global objectlet eat = Animal.eat;
eat(); // global object

字段声明

公有字段

  1. 不需要let, const等关键字
  2. 预先声明
class Rectangle {height = 0;width;constructor(height, width) {this.height = height;this.width = width;}
}

私有字段

  1. 只能在类内部读取,外部无法调用。
  2. 私有字段仅能在字段声明中预先定义。
class Rectangle {#height = 0;#width;constructor(height, width) {this.#height = height;this.#width = width;}
}

extends

我们可以创建一个子类来扩展父类的功能。子类继承了父类的属性和方法,并可以在其基础上进行扩展或重写。

class Father {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise.`);}
}class Son extends Father {constructor(name) {super(name); // 调用超类构造函数并传入 name 参数}speak() {console.log(`${this.name} barks.`);}
}var d = new Son("Mitzie");
d.speak(); // 'Mitzie barks.'

super

super 关键字用于调用对象的父对象上的函数.

class Father {constructor(name) {this.name = name;}speak() {console.log(this.name + " makes a noise.");}
}class Son extends Father {speak() {super.speak();console.log(this.name + " roars.");}
}

| 本文参考:MDN

相关文章:

【Javascript】ES6新增之类的认识

在现代编程语言中,类是面向对象编程范式中的核心概念之一。 与函数类似,类本质上是一种特殊的函数,它允许我们将数据和操作封装在一起,以创建具有共同行为和状态的对象。 在类的世界里,我们有类表达式和类声明&#xf…...

C#随机法 双峰函数 求极值 避免落入局部最优解

避免落入局部最优解,只要让步长够长即可。 x1 resultX1 random1.NextDouble()*100; 如果后面不乘以100,则很大概率落入负数的最大值 Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX10,max-999999,maxTemp0;for (int i …...

JavaScript高级:常见设计模式

设计模式是在软件开发中重复出现的问题的解决方案,它们是经过验证的、被广泛接受的最佳实践。设计模式可以让我们避免重复造轮子,提高代码质量和可维护性。在本文中,我们将介绍几种常见的设计模式,以及它们的实现和应用。 1. 单例…...

32bit国产低功耗无线MCU芯片

超低功耗无线MCU芯片MS1642,集成了高性能的32位ARMCortex-M0内核,宽电压工作范围的MCU。嵌入高达64Kbytes高可靠Flash和8Kbytes SRAM存储器,最高工作频率32MHz。芯片集成多路I2C、USART等通讯外设,1路12bit ADC,5个16b…...

scope组件穿透

今天我们以单选框为例来探究一下样式的穿透问题 1.代码 <template><div class""><el-radio v-model"radio" label"1">备选项</el-radio><el-radio v-model"radio" label"2">备选项</el-r…...

分类预测 | Python实现LR逻辑回归多输入分类预测

分类预测 | Python实现LR逻辑回归多输入分类预测 目录 分类预测 | Python实现LR逻辑回归多输入分类预测基本介绍模型描述源码设计学习小结参考资料基本介绍 逻辑回归是一种广义线性的分类模型且其模型结构可以视为单层的神经网络,由一层输入层、一层仅带有一个sigmoid激活函数…...

【微信小程序】通过使用 wx.navigateTo方法进行页面跳转,跳转后的页面中通过一些方式回传值给原页面

以下是几种常见的回传值的方式&#xff1a; 使用 wx.navigateTo 方法传递参数&#xff1a; 在跳转时&#xff0c;可以在目标页面的 URL 中携带参数&#xff0c;然后在目标页面的 onLoad 方法中获取参数&#xff0c;并在目标页面中进行处理。例如&#xff1a; // 原页面跳转到目…...

DIP: Spectral Bias of DIP 频谱偏置解释DIP

On Measuring and Controlling the Spectral Bias of the Deep Image Prior 文章目录 On Measuring and Controlling the Spectral Bias of the Deep Image Prior1. 方法原理1.1 动机1.2 相关概念1.3 方法原理频带一致度量与网络退化谱偏移和网络结构的关系Lipschitz-controlle…...

【考研数学】概率论与梳理统计 | 第一章——随机事件与概率(1)

文章目录 一、随机试验与随机事件1.1 随机试验1.2 样本空间1.3 随机事件 二、事件的运算与关系2.1 事件的运算2.2 事件的关系2.3 事件运算的性质 三、概率的公理化定义与概率的基本性质3.1 概率的公理化定义3.2 概率的基本性质 写在最后 一、随机试验与随机事件 1.1 随机试验 …...

LeetCode 36题:有效的数独

题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff…...

word横向页面侧面页码设置及转pdf后横线变竖线的解决方案

在处理材料的时候&#xff0c;会遇到同一个文档里自某一页开始&#xff0c;页面布局是横向的&#xff0c;这时候页码要设置在侧面&#xff0c;方法是双击页脚&#xff0c;然后在word工具栏上选择“插入”——>“文本框”——>“绘制竖版文本框”&#xff0c;然后在页面左…...

华为OD机试 - 字符串划分(Java JS Python)

题目描述 给定一个小写字母组成的字符串 s,请找出字符串中两个不同位置的字符作为分割点,使得字符串分成三个连续子串且子串权重相等,注意子串不包含分割点。 若能找到满足条件的两个分割点,请输出这两个分割点在字符串中的位置下标,若不能找到满足条件的分割点请返回0,…...

使用 `nmcli` 在 CentOS 8 上添加永久路由

CentOS 8 使用 NetworkManager 作为默认的网络管理工具&#xff0c;因此我们可以使用 nmcli 工具来实现相同的目标。使用 nmcli 可以更加直观地管理路由&#xff0c;并且更符合 CentOS 8 的默认网络管理方式。 以下是使用 nmcli 在 CentOS 8 上添加永久路由的步骤&#xff1a;…...

Java基础五之for循环小练习

加油,新时代大工人&#xff01; 一、Java基础之算术运算符 二、Java基础之类型转换 三、Java基础之【字符串操作以及自增自减操作】 四、Java基础之赋值运算符和关系运算符 package base;import java.io.InputStream; import java.util.Scanner;/*** author wh* date 2023年08…...

解决 Python RabbitMQ/Pika 报错:pop from an empty deque

使用 python 的 pika 包连接rabbitmq&#xff0c;代码如下&#xff1a; import pika import threading import timedef on_message(channel, method_frame, header_frame, body):print(fon_message thread id: {threading.get_ident()})delivery_tag method_frame.delivery_t…...

观察者模式实战

场景 假设创建订单后需要发短信、发邮件等其它的操作&#xff0c;放在业务逻辑会使代码非常臃肿&#xff0c;可以使用观察者模式优化代码 代码实现 自定义一个事件 发送邮件 发送短信 最后再创建订单的业务逻辑进行监听&#xff0c;创建订单 假设后面还需要做其它的…...

035_小驰私房菜_Qualcomm账号注册以及提case流程

全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 一、账号注册 1)登陆高通网站Wireless Technology & Innovation | Mobile Technology | Qualcomm, 采用…...

uniapp input输入框placeholder文本右对齐

input输入框placeholder文本右对齐 给input标签加上placeholder-class&#xff0c;这个是给placeholder设置样式&#xff0c;右对齐这就是text-align:right;字体颜色之类依次编辑即可。...

分布式监控平台—zabbix

前言一、zabbix概述1.1 什么是zabbix1.2 zabbix的监控原理1.3 zabbix常见五个应用程序1.4 zabbix的监控模式1.5 监控架构1.5.1 C/S&#xff08;server—client&#xff09;1.5.2 server—proxy—client1.5.3 master—node—client 二、部署zabbix2.1 部署 zabbix server 端2.2 …...

【leetcode】第一章数组-2

977. 有序数组的平方 简单的方法是平方后使用排序方法第2种方法是双指针方法&#xff0c;从两边进行判断&#xff0c;将最大的从后往前放 public static int[] sortedSquares(int[] nums) {// 输入&#xff1a;nums [-4,-1,0,3,10]// 输出&#xff1a;[0,1,9,16,100]// 解释…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...