原型链继承
,1,理解原型链 2,确定原型和实例的关系(instanceof,isPrototypeOf)3,重写原型方法,加谨慎(1,b.prototype = new a() 后重写a的方法 -》(实例和原型和松散耦合)2,不能使用字面量重写原型方法,会重写原型链,断开了a和b的连接)4,原型链继承问题1,回顾下:原型里引用各类型会被所有实例共享,所以需要在构造函数定义 ; 在原型链继承里,a构造函数定义引用类型array -》 b.prototype = new a() 这个时候b的prototype拥有了a的引用类型,结果是所有的b实例都共享了a的引用类型;原型链继承问题 2,没有办法在不影响其他实例的情况下传参
借用构造函数继承
使用.call()(或.apply()) 将A构造函数借用到B构造函数,new B() 后拥有了A构造函数的属性
组合继承
指的是原型链和借用构造函数的技术组合到一起,基本和创建对象类似,组合了这两种的优点
组合继承容易乱,看一下代码理解
function SuperType (name) {
this.name = name
this.color = ['','','']
}
SuperType.prototype.sayName = function () {
console.log(this.name)
}
function SupType (name, age) {
SuperType.call(this, name)
this.age = age
}
SupType.prototype = new SuperType()
SupType.prototype.coustrustor = SubType使用借用构造函数继承了SuperType实例属性 使用原型链继承,获取SuperType的原型方法,也就是共享方法,在原型链继承SuperType相当于重写了原型,重写会失去construstor属性,重写需要增加构造属性指向增加函数本身;
这种情况是使用最多的情况!!! 后面略过