JavaScript中Class
- 什么是类?
- 写一个Person类
- 类的实例化
- new一个实例的时候发生了什么
- 类的静态属性和实例属性
什么是类?
class 类是一种抽象的体现,用来表示具有相同特性的一类事物,是面向对象编程(oop)不可缺少的工具。
写一个Persion类
下面我们定义了一个简单的Person类,通过constructor构造函数定义了实例化后对象的样子,也就是定义了属性。同时这个人类还可以有动作,那么我们举了个吃饭的例子。
<script>
class Person {
constructor(name) {
this.name = name;
this.type = '人';
}
eat() {
console.log('开始吃饭!');
}
getName() {
return this.name;
}
}
</script>
类的实例化
下面我们通过new Person(‘ZhangSan’)实例化了ZhangSan这个人物
打印后我们发现ZhangSan的[prototype]指向了Person类
<script>
class Person {
constructor(name) {
this.name = name;
this.type = '人';
}
eat() {
console.log('开始吃饭!');
}
getName() {
return this.name;
}
}
//类的实例化 - 实例化张三这个人物
let ZhangSan = new Person('张三');
console.log(Person);
console.log(ZhangSan)
</script>
new一个实例的时候发生了什么
1、在堆空间创建一个对象
2、对象的[[Prototype]]指向其构造函数的prototype
3、constructor 中this被赋值为这个对象
4、执行constructor构造器函数 给对象创建属性
5、最后一点 如果constructor函数内返回了一个对象,则实例就是该对象,反之实例就是刚刚在堆内存中创建的对象
类的静态属性和实例属性
实例属性是所有的实例都可以访问的属性,静态属性是只有类本身才能访问的
静态属性通过static关键字来定义,或者直接Person.xxx
假设Person有一个秘密,只有他自己可以访问到
通过static关键字设置的静态属性直接挂在Person类对象上了,实例属性都是挂在prototype上的
class Person {
#height
constructor(name) {
this.name = name;
this.type = '人';
this.#height = 175;
}
eat() {
console.log('开始吃饭!');
}
getName() {
return this.name;
}
static secret() {
console.log('这是我的秘密')
}
}