JavaScript class 类

news/2025/3/25 10:12:08/

类是用于创建对象的模板。
我们使用 class 关键字来创建一个类,类体在一对大括号 {} 中,我们可以在大括号 {} 中定义类成员的位置,如方法或构造函数。

constructor构造方法

  • 构造方法在创建新对象时会自动执行,用于创建和初始化对象属性。
  • 如果不定义构造方法,JavaScript 会自动添加一个空的构造方法。
  • 可以返回函数的构造方法,可以用于判断变量属性
  • 一个类只能拥有一个名为“constructor”的特殊方法。如果类包含多个constructor的方法,则将抛出 一个SyntaxError 。
  • 一个构造函数可以使用 super 关键字来调用一个父类的构造函数。

创建

我们使用关键字 class 创建一个类,可以添加一个 constructor() 方法,然后添加任意数量的方法

class ClassName {constructor() { ... }//方法会在类的原型上method1(){...}method2(){...}
}

定义好类后,我们就可以使用 new 关键字来创建对象:

class Runoob {constructor(name, year) {this.name = name;this.year = year;}age() {let date = new Date();return date.getFullYear() - this.year;}
}let runoob = new Runoob("菜鸟教程", 2018);
document.getElementById("demo").innerHTML =
"菜鸟教程 " + runoob.age() + " 岁了。";

类表达式

  • 类表达式是定义类的另一种方法。类表达式可以命名或不命名。
  • 命名类表达式的名称是该类体的局部名称。
// 未命名/匿名类
let Runoob = class {constructor(name, url) {this.name = name;this.url = url;}
};
console.log(Runoob.name);// "Runoob"// 命名类表达式
let Runoob = class Runoob2 {//Runoob2这个名字仅在类内部可见constructor(name, url) {this.name = name;this.url = url;}
};
console.log(Runoob.name);// "Runoob2"//动态按需创建
function makeClass(phrase) {// 声明一个类并返回它return class {sayHi() {alert(phrase);}};
}
// 创建一个新的类
let User = makeClass("Hello");
new User().sayHi(); // Hello

声明提升

函数声明会提升,但是类声明不会提升

getters、setters

就像对象字面量,类包括 getters/setters,计算属性(computed properties)等。

  • getter 是一种获得属性值的方法,setter是一种设置属性值的方法
  • getter负责查询值,它不带任何参数,setter则负责设置键值,值是以参数的形式传递,在他的函数体中,一切的return都是无效的
  • get/set访问器不是对象的属性,而是属性的特性特性只有内部才用,因此在javaScript中不能直接访问他们,为了表示特性是内部值,用两队中括号括起来表示如[[Value]]
  • 注意:即使 getter 是一个方法,当你想获取属性值时也不要使用括号。
  • getter/setter 方法的名称不能与属性的名称相同,在本例中属名为 sitename。
    • 很多开发者在属性名称前使用下划线字符 _ 将 getter/setter 与实际属性分开
class User {constructor(name) {// 调用 setterthis.name = name;}get name() {return this._name;}set name(value) {if (value.length < 4) {alert("Name is too short.");return;}this._name = value;}
}
let user = new User("John");
alert(user.name); // John
user = new User(""); // Name is too short.

计算属性名称[…]

class User {['say' + 'Hi']() {alert("Hello");}
}
new User().sayHi();

类字段

“类字段”是一种允许添加任何属性的语法。
类字段重要的不同之处在于,它们会在每个独立对象中被设好,而不是设在 User.prototype:

class User {name = "John";
}
let user = new User();
alert(user.name); // John
alert(User.prototype.name); // undefined

使用类字段绑定方法

确保方法中的this指向class对象
在浏览器环境中,它对于进行事件监听尤为有用。

class Button {constructor(value) {this.value = value;}click = () => {alert(this.value);}
}let button = new Button("hello");
setTimeout(button.click, 1000); // hello

特性

  • 和普通函数不同,必须通过new调用
  • 类方法不可枚举
  • 类总是使用use strict
class Runoob {constructor(name, year) {this.name = name;this.year = year;}age() {// date = new Date();  // 错误 该变量不可以使用let date = new Date(); // 正确 、return date.getFullYear() - this.year;}
}

http://www.ppmy.cn/news/1008863.html

相关文章

MyBatis查询数据库(4)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 终于到了MyBatis最后一篇&#xff0c;这篇讲的是动态SQL的使用。 复杂情…

认识 spring AOP (面向切面编程) - springboot

前言 本篇介绍什么是spring AOP, AOP的优点&#xff0c;使用场景&#xff0c;spring AOP的组成&#xff0c;简单实现AOP 并 了解它的通知&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 什么是s…

10 日志系统(下)

10 日志系统&#xff08;下&#xff09; 本文内容 日志系统分为两部分&#xff0c;其一是单例模式与阻塞队列的定义&#xff0c;其二是日志类的定义与使用。 本篇将介绍日志类的定义与使用&#xff0c;具体的涉及到基础API&#xff0c;流程图与日志类定义&#xff0c;功能实现…

VX-API-Gateway开源网关技术的使用记录

VX-API-Gateway开源网关技术的使用记录 官网地址 https://mirren.gitee.io/vx-api-gateway-doc/ VX-API-Gateway(以下称为VX-API)是基于Vert.x (java)开发的 API网关, 是一个分布式、全异步、高性能、可扩展、轻量级的可视化配置的API网关服务官网下载程序zip包 访问 https:/…

笙默考试管理系统-MyExamTest(27)

笙默考试管理系统-MyExamTest&#xff08;27&#xff09; 目录 一、 笙默考试管理系统-MyExamTest 二、 笙默考试管理系统-MyExamTest 三、 笙默考试管理系统-MyExamTest 四、 笙默考试管理系统-MyExamTest 五、 笙默考试管理系统-MyExamTest 笙默考试管理系统-MyEx…

嵌入式开发学习(STC51-15-红外遥控)

内容 使用外部中断功能&#xff0c;使按下红外遥控器&#xff0c;将对应键值编码数据解码后通过数码管显示 红外遥控介绍 红外线简介 人的眼睛能看到的可见光按波长从长到短排列&#xff0c;依次为红、橙、黄、绿、青、蓝、紫&#xff1b; 其中红光的波长范围为 0.62&…

Django架构图

1. Django 简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架 使用 Django&#xff0c;只要很少的代码&#xff0c;Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容&#xff0c;并进一步开发出全功能的 Web 服务 Django 本身…

使用七牛云、阿里云、腾讯云的对象存储上传文件

说明&#xff1a;存在部分步骤省略的情况&#xff0c;请根据具体文档进行操作 下载相关sdk composer require qiniu/php-sdkcomposer require aliyuncs/oss-sdk-php composer require alibabacloud/sts-20150401composer require qcloud/cos-sdk-v5 composer require qcloud_s…