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