JS【详解】类 class ( ES6 新增语法 )
本质上,类只是一种特殊的函数。
console.log(typeof 某类); //"function"
声明类 class
方式 1 – 类声明
class Car {constructor(model, year) {this.model = model;this.year = year;}
}
方式 2 – 类表达式
匿名式
const Car = class {constructor(model, year) {this.model = model;this.year = year;}
}
命名式 —— 类名称在表达式定义的内部有效,在外部无法使用
const NamedCar = class Car {constructor(model, year) {this.model = model;this.year = year;}getName() {return Car.name;}
}
const ford = new NamedCar();
console.log(ford.getName()); // Car
console.log(ford.name); // 引用错误: name未定义
构造函数 constructor
每个类只能存在一个,在构造器中可以通过super()方法来调用其父类的构造器。
类的属性(原型方法)
支持表达式命名,以下三种效果相同:
class CarOne {driveCar() {}
}
class CarTwo {['drive' + 'Car']() {}
}
const methodName = 'driveCar';
class CarThree {[methodName]() {}
}
类的修饰符
- get 获取类的属性值
- set 修改类的属性值
class Obj {c="我是原生的a,只是需要在this.c暂时存储",get a(){return this.c },set a(val){this.c=val}
}const obj = new Obj()
使用类 new
class Car {constructor(model, year) {this.model = model;this.year = year;}
}
const fiesta = new Car('Fiesta', '2010');
类的继承 extends
class Animal {constructor(name) {this.name = name;}speak() {console.log(this.name + ' generic noise');}
}
class Cat extends Animal {speak() {console.log(this.name + ' says Meow.');}
}
class Lion extends Cat {speak() {super.speak();console.log(this.name + ' Roars....');}
}
var l = new Lion('Lenny');
l.speak();
//"Lenny says Meow."
//"Lenny Roar...."
- 子类内通过 super 调用父类
在子类的构造器中,必须先调用super()方法才能正确地获取到this关键字
class Base {}
class Derive extends Base {constructor(name) {this.name = name; //'this' 不允许在 super()之前}
}
子类中,如果定义了构造器,则必须在其中调用super()方法,否则会报错
class Base {}
class Derive extends Base {constructor() { //在构造器中没有调用super()方法}
}
- 父类默认构造器
constructor(){}
- 子类默认构造器
constructor(...args){super(...args);
}
多重继承
JavaScript本身不支持多重继承,在ES6中实现mixin的一种比较流行的实现方式是编写输入为父类输出为子类的函数,例如:
class Person {}
const BackgroundCheck = Tools => class extends Tools {check() {}
};
const Onboard = Tools => class extends Tools {printBadge() {}
};
class Employee extends BackgroundCheck(Onboard(Person)) {
}
Employee类依次顺序继承了BackgroundCheck类、Onboard类和Person类。
类和普通函数的区别
- 类必须先声明,再使用
var ford = new Car(); //引用错误
class Car {}
- 普通函数可用先使用,再声明
normalFunction(); //先使用
function normalFunction() {} //后声明
【面试题】手写 class
https://blog.csdn.net/weixin_41192489/article/details/139442546
相关文章:
JS【详解】类 class ( ES6 新增语法 )
本质上,类只是一种特殊的函数。 console.log(typeof 某类); //"function"声明类 class 方式 1 – 类声明 class Car {constructor(model, year) {this.model model;this.year year;} }方式 2 – 类表达式 匿名式 const Car class {constructor(mod…...
vue中使用$set方法给对象添加属性
vue中可以使用$set()给对象添加属性,但不是所有的对象都可以使用,vue中api明确说明,它必须用于向响应式对象上添加属性 响应式对象,vue的响应式原理,可以查看:深入响应式原理 — Vue.js ①对象赋值 this…...
【Python】ftplib的使用
仅描述基础要点,备忘。 python自带ftplib库,可实现ftp读写。 1 要点 ftp未使用默认端口21时,需显示指定端口。ftp路径带有中文,可能需要设置ftp的encoding属性为 gbk。ftplib不支持递归创建目录,需手动创建层级目录…...
CSS 【详解】CSS 函数(含 calc,min,max,clamp,cubic-bezier,env,steps 等)
函数描述CSS 版本attr()返回选择元素的属性值。2calc()允许计算 CSS 的属性值,比如动态计算长度值。3cubic-bezier()定义了一个贝塞尔曲线(Cubic Bezier)。3hsl()使用色相、饱和度、亮度来定义颜色。3hsla()使用色相、饱和度、亮度、透明度来定义颜色。3linear-grad…...
简单理解Lua 协程(coroutine)
也许更好的阅读体验 协程简单理解为可以暂停的线程,但是同一时刻只有一个协程可以处于运行状态。 文章目录 coroutine.create()coroutine.resume()coroutine.wrap()coroutine.yield()coroutine.resume()参数传递resume和yield之间互换数据 coroutine.create() lua…...
(day18) leetcode 204.计数质数
描述 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。 示例 1: 输入:n 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2: 输入:n 0 输出:0示例 3…...
SadTalker数字人服务器部署
一、单独SadTalker部署 git clone https://github.com/OpenTalker/SadTalker.gitcd SadTalker conda create -n sadtalker python3.8conda activate sadtalkerpip install torch1.12.1cu113 torchvision0.13.1cu113 torchaudio0.12.1 --extra-index-url https://download.pyto…...
Python实现一对多WebSocket发送给指定多个客户端
在一对多的WebSocket场景下,如果你想要向特定的多个客户端发送消息,而不是广播给所有客户端,你需要维护一个能够标识每个客户端的方式,比如使用用户名或者客户端ID。这样,你就可以根据需要选择向哪些客户端发送消息。 …...
Power BI 工具介绍
Power BI是一款商业智能(BI)软件,由微软开发,旨在帮助用户将复杂的数据转化为视觉化的交互式见解。Power BI提供了一套完整的工具,包括数据连接、数据准备、数据建模、数据分析和数据可视化等功能,使用户能…...
银河麒麟高级服务器操作系统V10加固操作指南
1:检查系统openssh安全配置: 2:检查是否设置口令过期前警告天数: 3:检查账户认证失败次数限制: 修改/etc/pam.d/system-auth文件中deny的参数即可 4:检查是否配置SSH方式账户认证失败次数限制:...
(leetcode学习)15. 三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&a…...
算法训练 | 图论Part8 | 117. 软件构建、47. 参加科学大会
目录 117. 软件构建 拓扑排序法 47. 参加科学大会 dijkstra法 117. 软件构建 题目链接:117. 软件构建 文章讲解:代码随想录 拓扑排序法 代码一:拓扑排序 #include <iostream> #include <vector> #include <queue> …...
编程从零基础到进阶(更新中)
题目描述 依旧是输入三个整数,要求按照占8个字符的宽度,并且靠左对齐输出 输入格式 一行三个整数,空格分开 输出格式 输出它们按格式输出的效果,占一行 样例输入 123456789 -1 10 样例输出 123456789-1 10 #include "stdio.…...
MySQL运维实战之ProxySQL(9.6)SQL黑名单
作者:俊达 利用mysql_query_rules表中的error_msg字段,可以实现SQL黑名单的功能。如果规则设置了error_msg,当SQL语句匹配这条规则时,proxysql会直接将error_msg的内容返回给客户端。 当遇到一些大查询严重影响数据库性能时&…...
深入了解MySQL中的innodb_lock_wait_timeout
引言 在数据库管理中,确保数据的一致性和完整性是至关重要的。MySQL的InnoDB存储引擎通过行级锁定机制来实现这一点。然而,当多个事务同时操作数据库时,可能会出现锁等待的情况。了解并合理配置innodb_lock_wait_timeout参数,对于…...
102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程
自定义实现的Table控件,支持跨qt版本,兼容qt5,qt6! 截图如下所示: 黑色风格如下所示: 视频演示入口:Qt QML QianWindowV2.5(新增曲线综合示例、QML最全Table交互示例、支持qt5/qt6)_哔哩哔哩_bilibili 1.示例页面入口…...
文章管理小程序的设计
管理员账户功能包括:系统首页,个人中心,作者管理,文章管理,文章分类管理,论坛,系统管理 微信端账号功能包括:系统首页,文章,论坛,我的 开发系统…...
Ubuntu22.04安装NIVIDIA显卡驱动总结
1.首先在安装驱动时需要判断系统有无GPU以及GPU的型号 可以参考这篇文章: https://blog.51cto.com/u_13171517/8814753#:~:textubuntu%20%E7%B3%BB%E7%BB%9F%20%E6%80%8E%E4%B9%88%E5%88%A4%E6%96%AD%E7%B3%BB%E7%BB%9F%E6%9C%89%E6%B2%A1%E6%9C%89GPU%201%20%E6%…...
Redis的配置优化、数据类型、消息队列
文章目录 一、Redis的配置优化redis主要配置项CONFIG 动态修改配置慢查询持久化RDB模式AOF模式 Redis多实例Redis命令相关 二、Redis数据类型字符串string列表list集合 set有序集合sorted set哈希hash 三、消息队列生产者消费者模式发布者订阅者模式 一、Redis的配置优化 redi…...
数据结构之初始二叉树(2)
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 二叉树的前置知识(概念、性质、、遍历) 通过上篇文章的学习,我们…...
终极指南:如何用calendar.js轻松实现农历公历智能转换
终极指南:如何用calendar.js轻松实现农历公历智能转换 【免费下载链接】calendar.js 中国农历(阴阳历)和西元阳历即公历互转JavaScript库 项目地址: https://gitcode.com/gh_mirrors/ca/calendar.js 想要在你的Web应用中添加中国传统文…...
Unity图表性能优化:从折线图到饼图的底层实现与避坑指南
1. 为什么Unity里做图表不是“加个UI控件”就完事了? 在Unity项目里,当策划甩来一句“这个数据面板加个折线图展示用户留存率”,或者美术提出“战斗结算页需要动态饼图显示伤害来源分布”,很多开发者第一反应是:去Asse…...
重尾分布采样的SMTM算法:原理与实践
1. 重尾分布采样的挑战与MCMC方法演进 在贝叶斯统计和统计物理领域,我们经常需要从复杂的概率分布中采样。想象一下,你手里有一袋形状各异的糖果(代表数据点),但袋子是不透明的,你只能通过摸取来了解糖果的…...
微信小程序逆向工程深度突破:wxappUnpacker实战解密与架构解析
微信小程序逆向工程深度突破:wxappUnpacker实战解密与架构解析 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 在移动应用开发领域,…...
28 岁大专逆袭转行网络安全 资深前辈避坑忠告
网络安全行业 “人才缺口 300 万 、平均年薪超 25 万” 的红利,让无数职场人动了转行心思。尤其是学历普通(如大专)的群体,既面临原有岗位的天花板,又渴望通过技术转型实现薪资跃迁。但网安行业看似门槛低,…...
魔兽争霸III终极优化指南:7大核心功能让经典游戏重获新生
魔兽争霸III终极优化指南:7大核心功能让经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸III》在现代电脑…...
华硕笔记本性能优化终极指南:G-Helper轻量控制工具完整解析
华硕笔记本性能优化终极指南:G-Helper轻量控制工具完整解析 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenboo…...
告别静态分析!用R包SetMethods搞定面板数据QCA的三大一致性(附代码实战)
动态QCA实战指南:用R包SetMethods破解面板数据三大一致性难题 社会科学研究者常面临一个核心挑战:如何从随时间变化的面板数据中提取稳定可靠的因果模式?传统横截面QCA分析往往无法捕捉时间或个体效应,导致结论缺乏稳健性。本文将…...
2026头部GEO服务商哪家实力强?服务质量效果深度测评,合作优选榜单
随着生成式AI全面接管大众信息检索与商业决策场景,GEO生成式引擎优化已然成为企业品牌智能化布局的核心刚需。相较于传统SEO的页面排名逻辑,GEO主打适配大模型语义推理、信源采信、答案生成规则,帮助品牌成为AI问答中的核心推荐信源。当下多数…...
构建全志Tina Linux Docker编译镜像:从环境配置到CI/CD实践
1. 项目概述:为什么我们需要一个专属的Docker编译镜像?如果你和我一样,长期在嵌入式Linux开发领域摸爬滚打,那么“环境搭建”这四个字,大概率是你开发周期里最耗时、也最令人头疼的环节之一。尤其是当我们面对像全志Ti…...
