JavaScript之深入Class类
1.1 类定义
1 | // 类声明 |
类的构成包含构造函数方法、实例方法、获取函数、设置函数和静态类方法,空的类一样有效。
1 | class Foo { } //空类有效 |
类可以看做是一个特殊函数。并且有显式原型prototype,该原型也有一个constructor指向自身。并且类也可以用instanceof检查是否存在于实例的原型链中。
1.2 类构造函数
new一个类的操作如下
- 在内存中创建一个新对象
- 这个新对象内部的[[Prototype]]指针被赋值为构造函数的prototype属性
- 构造函数内部的this被赋值为这个新对象
- 执行构造函数内部的代码(给新对象添加属性)
- 如果构造函数返回非空对象,则返回该对象;否则返回刚创建的新对象
实例化类,如果不需要参数,括号可免。
类构造函数与普通构造函数的区别是:
1.类构造函数必须使用new,普通构造函数不使用new则默认以全局的this为对象
2.不使用new调用类构造函数会抛出错误
1.3 实例、原型和类成员
实例成员不会在原型上共享,并且可以给实例继续添加新成员。
在类块中定义的所有内容都定义在类的原型上。类块中不能定义成员数据(类定义外部可以手动添加成员数据)。
类支持获取和设置访问器,与普通对象一样,设置属性,重写get,set方法。
1.4 类继承
使用extends关键字实现继承。可以继承类和普通的构造函数。
在类当中调用super相当于调用构造函数,传入参数需要手动传入。
如果没有定义类构造函数,实例化时会自动调用super。
类会继承内置类型。
1.5 小结
工厂模式就是一个简单的函数,这个函数可以创建对象,为它添加属性和方法,然后返回这个对象。这个模式在构造函数模式出现后就很少用了。
ES6新增的类是基于现有原型机制的语法糖。类的语法让开发者可以优雅地定义向后兼容的类,既可以继承内置类型,也可以自定义类型。类有效地跨越了对象实例、对象原型和对象类之间的鸿沟。