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__属性

  1. 子类的__proto__属性,表示构造函数的继承,总是指向父类。

  2. 子类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?