类
面向对象
- 面向对象编程(OOP)
- 程序是干嘛的?
- 程序就是对现实世界的抽象
- 对象是干嘛的?
- 一个事物抽象到程序中后就变成了对象
- 在程序的世界中,一切皆对象
- 面向对象的编程
- 面向对象的编程指,程序中的所有操作都是通过对象来完成
- 做任何事情之前都需要先找到它的对象,然后通过对象来完成各种操作
- 程序是干嘛的?
类
-
使用Object创建对象的问题
- 无法区分出不同类型的对象
- 不方便批量创建对象
-
在JS中可以通过类(class)来解决这个问题
- 类是对象模板,可以将对象中的属性和方法直接定义在类中,定义后,就可以直接通过类来创建对象
- 通过同一个类创建的对象,我们称为同类对象,可以使用instanceof来检查一个对象是否是由某一个创建,如果某个对象是某个类所创建,则我们称该对象是这个类的实例
-
语法:
class 类名{} 类名要使用大驼峰命名
const 类名 = class{} -
通过类创建对象
new 类()
class Person { }
const p1 = new Person();
console.log(p1 instanceof Person); // true
属性
- 类是创建对象的模板,要创建第一件事就是定义类
class Person {
/*
类的代码块,默认就是严格模式
类的代码块是用来设置对象的属性的,不是什么代码都能写
*/
name = "孙悟空"; // Person的实例属性,实例属性只能通过实例访问
age = 18;
static test = "test静态属性"; // 使用static声明的属性,是静态属性(类属性) Person.test
static hh = "静态属性"; // 静态属性只能通过类去访问 Person.hh
}
const p1 = new Person();
console.log(p1); // Person {name: '孙悟空', age: 18}
console.log(p1.name); // 孙悟空
console.log(Person.test); // test静态属性
方法
class Person {
name = "孙悟空";
test1 = function () {
// 添加方法的一种
}
test2() {
// 添加方法(实例方法) 实例方法中的this就是当前实例
console.log(this);
}
static test3() {
// 静态方法(类方法) 通过类来调用,静态方法中的this指向的是当前类
console.log(this);
}
}
const p1 = new Person();
p1.test2();
Person.test3();
构造函数
- 当我们在类中直接指定实例属性的值时,意味着我们创建的所有对象的属性都是这个值
class Person {
/*
在类中可以添加一个特殊的 方法constructor,该方法我们称为构造函数(构造方法)
构造函数会在我们调用类创建对象时执行
可以在构造函数中,为实例属性进行赋值
在构造函数中,this表示当前所创建的对象
*/
name; // 可以不写
age;
gender;
constructor(name, age, gender) {
console.log("构造函数执行了", name, age, gender);
this.name = name;
this.age = age;
this.gender = gender;
}
}
const p1 = new Person("孙悟空", 18, "男"); // 构造函数执行了 孙悟空 18 男