JS中类的定义
分类:javascript
类的定义
- 与函数类型类似,定义类也有两种主要方式:类声明和类表达式。这两种方式都使用class关键字加大括号
//类的声明
class Person {}
//类的表达式
const Animal = class {};
- 与函数表达式类似,类表达式在它们被求值之前也不能引用。不过,与函数定义不同的是,虽然函数声明可以提升,但类定义不能。
- 与函数声明不同的地方是,函数受函数作用域的限制,而类受块作用域的限制
类的构成
- 包含构造函数、实例方法、获取函数、设置函数和静态类方法,但这些都不是必须的。空的类定义照样有效。默认情况下、类定义中代码都在严格模式下执行
//空定义,有效
class Foo {}
//有构造函数的类,有效
class Bar {
constructor(){}
}
//有获取函数的类,有效
class Baz {
get myBza(){}
}
//有静态方法的类,有效
class Qux {
static myQuex() {}
}
类的构造函数
- 使用new操作符实例化Person的操作等于使用new调用其构造函数
- 在内存中创建一个新的对象
- 这个新对象内部的[[Prototype]]指针被赋值为构造函数的prototype属性。
- 构造函数内部的this被赋值这个新的对象
- 执行构造函数内部的代码(给新对象添加属性)
- 如果构造函数返回非空对象,则返回该对象,否则创建新的对象。
class Animal {}
class Person {
constructor() {
console.log('person color')
}
}
class Vegetable {
constructor() {
this.color = 'orange';
}
}
let a = new Animal();
let p = new Person(); //person color
let v = new Vegetable();
console.log(v.color); // orange
- 默认情况下,类的构造函数执行完之后会返回this对象。构造函数返回的对象会被用作实例化的对象,如果没有什么引用新创建的this对象,那么这个对象会被销毁。