class Foo {
// static 声明静态方法
static classMethod () {
// 静态方法中的this指向类
console.log(this);
return 'hello'
}
}
var foo = new Foo();
class Bar extends Foo {};
Foo.classMethod(); // hello
Bar.classMethod(); // hello 类的静态方法可以被子类继承
foo.classMethod(); // is not a function
class Shape {
constructor() {
if(new.target === Shape) {
return new Error('此类不能实例化');
}
}
}
class Rectangle extends Shape {
constructor(length, width) {
super();
// ...
}
}
var x = new Shape(); // 报错
var y = new Rectangle(3, 4);// 正常运行
Class
ES6引入了Class(类)这个概念,作为对象的模板。通过关键字
class
可以定义类。类内部的所有方法是不可枚举的
constructor 类的默认方法,通过new命令生成对象实例时,自动调用该方法,返回实例对象(this)。
自身属性与原型属性
不存在变量提升
类的静态方法 静态方法中的this指向类
不能实例化只能被继承的类 new.target 指向new命令作用于的那个构造函数。 Class内部调用new.target,返回当前Class。
类继承
Class可以通过
extends
关键字实现继承。类的prototype属性和proto属性
__ptoto__
属性,表示构造函数的继承,总是指向父类prototype
属性的__proto__
属性,表示方法的继承,总是指向父类的prototype
属性。参考:ES6入门