- 实例instance有__pro__指针指向类的原型SubType.prototype;
- 实例instance有constructor指针指向SuperType,实际上就是SuperType实例constructor的指向;
- SubType.prototype是SuperType的一个实例,即SubType的原型为SuperType的一个实例;
- SubType.prototype有一个__pro__指针指向SuperType.prototype
- SubType.prototype有一个constructor指针指向SuperType
- SuperType.prototype有一个constructor指针指向SuperType
- SuperType.prototype有一个__pro__指针指向Object.prototype
对于原型是非其他类型实例的,constructor默认指向自身,__pro__指向Object.prototype;
--原型的原型是父类的原型,即Object.prototype,constructor指向自身
对于原型是其他类型的实例,constructor指向父类(因为是父类的一个实例,实际上也是指向自身),__pro__指向父类原型。
--原型的原型是父类的原型,constructor实际上还是指向自身。
因此可以用一句话总结:原型的__pro__是父类的原型,constructor指向自身。
最常用的继承:组合继承
function SuperType(name){
This.name=name;
This.colors=[‘red’,’blue’]
}
Function SubType(name,age){
SuperType.call(this,name);
This.age = age;
}
SubType.prototype = new SuperType();
SubType.prototype.constructor=SubType;
SubType.prototype.sayAge = function(){};
Var instance = new SubType(‘张三’,24);
特点:
- 子类构造函数中调用父类构造函数,并改变this的指向
- 按照第一点执行之后,父类的属性会变成子类的属性
- 子类通过原型链的方式继承父类,即prototype为父类实例
- 将子类原型constructor指向自身
- 子类原型增加新的方法
- 新建的子类实例将各自含有父类的属性