js继承理解

140 阅读1分钟


原型链继承

,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属性,重写需要增加构造属性指向增加函数本身;

这种情况是使用最多的情况!!! 后面略过