Class
class
基本语法
ES6引入Class这个概念,作为对象模板。
ES5的构造函数Point,对应ES6的Point类的构造方法。
构造函数的prototype属性,在ES6的“类”上面继续存在。
prototype对象的constructor属性,直接指向“类”的本身。
constructor方法
constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。
constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象。
类的实例对象
类的调用的要加上new,类的所有实例共享一个原型对象。
this的指向
类的方法内部如果含有this,它默认指向类的实例。
Class的继承
Class之间可以通过extends关键字实现继承。
super表示父类的构造函数,新建父类的this对象。子类没有调用,会报错。
类的prototype属性和__proto__属性
子类的
__proto__属性,表示构造函数的继承,总是指向父类。子类
prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性。
Extends 的继承目标
子类继承Object类。
A其实就是构造函数Object的复制,A的实例就是Object的实例。
不存在任何继承。
这种情况下,A作为一个基类(即不存在任何继承),就是一个普通函数,所以直接继承Funciton.prototype。调用后返回空对象,指向造函数(Object)的prototype属性。
子类继承null。
super
super代表父类A的构造函数,返回子类b的实例。 spuer内部this指向B。
super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。
通过super调用父类的方法时,super会绑定子类的this。
实例的__proto__属性
子类实例的__proto__属性的__proto__属性,指向父类实例的__proto__属性。也就是说,子类的原型的原型,是父类的原型。
Class的取值函数(getter)和存值函数(setter)
prop属性有对应的存值函数和取值函数,因此赋值和读取行为都被自定义了。
Class 的 Generator 方法
Foo类的Symbol.iterator方法前有一个星号,表示该方法是一个 Generator 函数。Symbol.iterator方法返回一个Foo类的默认遍历器
Class 的静态方法
如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用。父类的静态方法,能被子类继承。也可以在super上调用。
ES6只用静态方法,没有静态属性。
new.target属性
new命令作用于的那个构造函数,子类继承父类时,new.target会返回子类。
Mixin模式的实现
Mixin模式指的是,将多个类的接口“混入”(mix in)另一个类。
上面代码的mix函数,可以将多个对象合成为一个类。
Last updated
Was this helpful?