ES6 Class只是一个语法糖,可以由ES5构造函数替代,只是class的写法更符号面向对象的语法
constructor
constructor()方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor()方法,如果没有显式定义,一个空的constructor()方法会被默认添加
class Point {
}
// 等同于
class Point {
constructor() {}
}
constructor 默认是返回实例对象的return this,当然也可以手动返回一个全新的对象return Object.create(null); 此时返回的对象将不再是calss的实例
类的实例
创建实例
class Point {
// ...
}
var point = new Point(2, 3);
- 类的属性和方法,除非显式定义在其本身(即定义在
this对象上),否则都是定义在原型上(即定义在class上) - 类的所有实例共享一个原型对象
- 实例属性可以生命在最顶层 (属性写在constructor外为实例对象的属性,函数写在constructor外为原型的函数)
// 旧
class IncreasingCounter {
constructor() {
this._count = 0;
}
}
// 新
class IncreasingCounter {
_count = 0
constructor() {
}
}
- 可以使用
get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为
class MyClass {
constructor() {}
get prop() {
return 'getter';
}
set prop(value) {
console.log('setter: '+value);
}
}
属性表达式
类的属性名,可以采用表达式
let methodName = 'getArea';
class Square {
constructor(length) {
// ...
}
[methodName]() {
// ...
}
}
Class表达式
类也可以使用表达式的形式定义
const MyClass = class Me {
getClassName() {
return Me.name;
}
};
静态属性 静态方法
静态属性,静态方法是类的属性和方法,并不是实例的
class Foo {
static bar() {}
static baz = 1
}
Foo.bar()
Foo.baz