简介: 在JavaScript中,类(`Class`)是一种创建对象的模板,它可以用来定义对象的属性和方法。类是一种抽象的概念,它定义了对象的行为和状态,而对象则是类的一个具体实例。

22. 类

1. 类的定义

在JavaScript中,类(Class)是一种创建对象的模板,它可以用来定义对象的属性和方法。类是一种抽象的概念,它定义了对象的行为和状态,而对象则是类的一个具体实例。

JavaScript中的类是基于原型继承的,它们本质上是一种特殊的函数。类的定义使用class关键字,定义类的属性和方法使用类的原型对象上的方法。

与函数类型相似,定义类也有两种主要方式:类声明和类表达式。

// 类声明
class Person{
   }

// 类表达式
const Person = class {
   }

2. 类的构成

类可以包含构造函数方法、实例方法、获取函数、设置函数和静态类方法,但都不是必需的。

// 空类定义
class Person{
   }

// 有构造函数的类
class Person {
   
  constructor() {
   }
}

// 有实例方法的类
class Person {
   
  say() {
   }
}

// 有获取函数的类
class Person {
   
  get name() {
   }
}

// 有设置函数的类
class Person {
   
  set name(newName) {
   }
}

// 有静态方法的类
class Person {
   
  static myStatic() {
   }
}

3. 类的实例化

类的实例可以使用new关键字创建,并且实例化后可以使用类的属性和方法。

class Person{
   
  constructor(name, age) {
   
    this.name = name;
    this.age = age;
  }

  sayName() {
   
    console.log("My name is "+this.name);
  }

  get names() {
   
    return this.name
  }

  // 定义在类本身上
  static myStatic() {
   
    return "Person's static"
  }
}

let p1 = new Person("Jack", 20)
let p2 = new Person("Marry", 18)
console.log(p1);//Person {name: 'Jack', age: 20}
console.log(p2);//Person {name: 'Marry', age: 18}
p1.sayName();//My name is Jack
console.log(p2.names);//Marry

console.log(p1.myStatic);//undefined
console.log(Person.myStatic());//Person's static

4. 类的继承

类可以使用继承来扩展其功能,子类可以继承父类的属性和方法,并可以添加自己的属性和方法。

// 类的继承
class Anyone extends Person{
   
  constructor(name, age, sex) {
   
    super(name, age)
    this.sex = sex;
  }

  saySex() {
   
    console.log(this.name +"'s sex is " + this.sex);
  }
}

let a1 = new Anyone("Bob", 16, "male")
a1.sayName();//My name is Bob
a1.saySex();//Bob's sex is male
相关文章
【可达性分析】
【可达性分析】
157 0
|
小程序
手机日记本小程序模板源码
手机日记本小程序模板源码
433 4
|
11月前
|
应用服务中间件 Linux nginx
Mac os 安装 nginx 教程(success)
这篇文章是关于如何在Mac OS系统上使用Homebrew安装nginx及其依赖,并解决安装过程中可能出现的权限问题。
1389 0
Mac os 安装 nginx 教程(success)
|
存储 缓存 自然语言处理
深入理解JS | 青训营笔记
深入理解JS | 青训营笔记
93 0
|
存储 缓存 安全
PHP框架详解 - symfony框架
PHP框架详解 - symfony框架
|
存储 关系型数据库 MySQL
Python搭建代理IP池实现存储IP的方法
Python搭建代理IP池实现存储IP的方法
216 2
从 Angular 中的 URL 获取查询参数
本文介绍了如何从 Angular 中的 URL 获取查询参数。 通过注入ActivatedRoute的实例,可以订阅各种可观察对象,包括queryParams和params observable。以下是范例: import { ActivatedRoute } from '@angular/rou...
1696 0
|
存储 XML 编解码
探索现代图片格式:从GIF到HEIF,优势与适用场景一览-2
使用场景: JPEG适用于各种需要高度压缩、广泛兼容性以及不需要透明背景的场景。它特别适用于摄影、照片、艺术品等复杂图像的存储和展示。
735 0
深拷贝和浅拷贝
类里面会为我们实现默认的拷贝,这个做的是值的拷贝,但是假如对象里的数据成员在堆上开辟了内存资源,如果继续浅拷贝就会导致两根指针指向同一块资源,从而产生内存泄漏问题。但是深拷贝可以解决这个问题,本文将详细介绍深拷贝与浅拷贝。