简言
类是用于创建对象的模板。它们用代码封装数据以对其进行处理。JS 中的类建立在原型之上,同时还具有一些类独有的语法和语义。在javascript中的Class类是一种创建对象的方法,它通过定义类来描述对象的属性和方法,通过实例化类来创建具体的对象。
类的使用场景
- 创建对象: 使用Class类可以方便的创建,从而避免使痛传统的函数或原型链方式创建对象的繁琐。
- 继承: 可以在子类中重用父类的属性和方法,同时还能扩展自己的属性和方法。
- 封装:使用Class类将属性和方法封装在类中,从而实现数据的行为隔离,提高代码的可维护性和安全性。
- 实现接口:使对象在实现某些特定的功能时遵循规范。
总而言之,使用 Class 类可以使代码更加结构化、易读、易维护,同时还可以提高代码的可复用性和扩展性。
Class类简单的例子
// 创建一个Person类
class Person {
// 构造器方法
constructor(name, age){
this.name = name
this.age = age
}
// 实例方法
speak() {
console.log(`我叫${this.name}, 今年${this.age}岁`)
}
// 静态方法
static plaseSpeak() {
consoloe.log(`你好啊${this.name}`)
}
// 创建一个Person的实例对象
const p1 = new Person('tom', 18)
// 调用实例
p1.speak() // 我叫tom, 今年18岁
// 调用静态方法
Person.plaseSpeak() // 你好啊tom
}
Class类 标准版本
class MyClass {
// 静态属性
static staticProperty = '静态属性';
// 构造函数
constructor(prop) {
// 私有属性
this.#privateProperty = prop;
// 公共属性
this.publicProperty = '公共属性';
}
// 私有属性
#privateProperty;
// 静态方法
static staticMethod() {
console.log('这是一个静态方法');
}
// 公共方法
publicMethod() {
console.log('这是一个公共方法');
// 调用私有方法
this.#privateMethod();
}
// 私有方法
#privateMethod() {
console.log('这是一个私有方法');
}
// Getter 方法
get privateProperty() {
return this.#privateProperty;
}
// Setter 方法
set privateProperty(value) {
this.#privateProperty = value;
}
// 公共静态方法
static publicStaticMethod() {
console.log('这是一个公共静态方法');
}
}
// 调用静态属性和静态方法
console.log(MyClass.staticProperty); // 输出:静态属性
MyClass.staticMethod(); // 输出:这是一个静态方法
// 创建实例并调用公共方法和 Getter/Setter 方法
const myObj = new MyClass('私有属性');
console.log(myObj.publicProperty); // 输出:公共属性
myObj.publicMethod(); // 输出:这是一个公共方法,这是一个私有方法
console.log(myObj.privateProperty); // 输出:私有属性
myObj.privateProperty = '新的私有属性';
console.log(myObj.privateProperty); // 输出:新的私有属性
// 调用公共静态方法
MyClass.publicStaticMethod(); // 输出:这是一个公共静态方法
这个示例代码展示了以下 Class 相关知识点:
- 静态属性和静态方法:通过 static 关键字声明静态属性和静态方法,并且可以通过类名直接访问。
- 构造函数:使用 constructor 关键字定义构造函数,用于创建实例对象并初始化属性。
- 私有属性和方法:通过在属性或方法名前面加上 # 符号定义私有属性和方法,外部无法直接访问和调用,只能在类内部使用。
- Getter 和 Setter 方法:使用 get 和 set 关键字定义 Getter 和 Setter 方法,用于控制类的属性访问和修改。
- 公共方法:定义在类中的公共方法可以被实例对象访问和调用。
- 公共静态方法:使用 static 关键字定义公共静态方法,可以通过类名直接调用。
Class类继承
// 父类
class Person {
// 构造器方法
constructor(name, age){
this.name = name
this.age = age
}
speak() {
console.log(`我叫${this.name}, 今年${this.age}岁`)
}
}
// 子类
class Student extends Person {
constructor(name, age, grade) {
super(name, age) // 要放在前边
this.grade = grade
}
speak() {
console.log(`我叫${this.name}, 今年${this.age}岁, 今年${this.grade}了`)
}
study() {
// study方法放在,类的原型对象上,供实例使用
// 通过Student实例调用study时, study中的this就是Student实例
console.log('我很努力的学习!')
}
}
const s1 = new Student('小张', 15, '高一')
s1.study() // 我很努力的学习!
s1.speak() // 我叫小张, 今年15岁, 高一了
总结:
- 类中的构造器不是必须写的,要对实例进行一些初始化的操作, 如添加指定属性时才写
- 如果A类继承了B类,且A类中写了构造器, 那么A类构造器中的super是必须要调用的
- 类中所定义的方法,都是放在了类的原型上, 供实例去使用