类的数据类型为==函数==,类指向构造函数,类的所有方法都在类的prototype属性上面。
在类的实例上调用方法,就是在调用原型上的方法。
class B {}
let b = new B();
b.constructor === B.prototype.constructor; //true
类的内部定义的方法都是不可枚举的,与ES5不同。
constructor方法
constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。没有显式定义时,会默认添加一个空的constructor方法。
类必须用new调用,否则会报错,普通构造函数不用new 也可以执行。
类的实例
与 ES5 一样,类的所有实例共享一个原型对象。
注意
- 类和模块内部,默认就是==严格模式==
- 类==不存在==变量提升
- 类内部含有的
this默认指向实例,如果单独使用类当中的方法会报错- 方案一:在
constructor中绑定this - 方案二:使用箭头函数
- 方案三:使用
Rroxy(具体待追加)
- 方案一:在
静态方法
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。
如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用。
注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。
父类的静态方法,可以被子类继承。
静态方法也是可以从super对象上调用的。
class Foo {
static classMethod() {
return 'hello';
}
}
class Bar extends Foo {
static classMethod() {
return super.classMethod() + ', too';
}
}
Bar.classMethod() // "hello, too"
实例属性的新写法
class A {
constructor() {
this._count = 1;
}
}
||
||
class A {
_count = 1;
}