继承机制
- 每个函数都有一个prototype属性,指向一个对象,该对象是原型对象;
- 构造函数生成实例时,该属性会自动成为实例对象的原型;
- 原型对象上的所有属性和方法,都能被实例对象共享继承;
- 原型对象的属性不是实例对象自身的属性,而是继承的;
- 只要修改原型对象,所有实例对象上继承的属性也会跟着变动;
原型链
- 所有对象都有自己的原型对象;
- 一个对象可以充当其他对象的原型;
- 原型对象也有自己的原型,所以就构成了原型链;
- 所有对象的原型最终都是Object.prototype,Object.prototype的原型则是null
constructor属性
- prototype对象有个constructor属性,默认指向prototype对象所在的构造函数;
- 所有实例对象都会继承constructor属性,这个属性也可以被重写;
- prototype整个对象被重新赋值时,需重新赋值constructor的指向,否则容易指向Object
- 通过读取某对象的constructor.name可以得到构造函数的名称 instanceof运算符
- instanceof运算符判断是否为某个构造函数的实例;
- instanceof只能用户对象,不可以用于原始类型的值;
- 可以用来调用构造函数时,是否忘记加new命令。
构造函数的继承
第一步:在子类的构造函数中,调用父类的构造函数,如在子构造函数体内父构造函数.call(this)
第二步:让子类的原型通过Object.create指向父类的原型;
第三步:将子类的原型的constructor指向自己的构造函数。