JavaScript中类的继承有哪些方法(组合继承进阶)
2017-12-05 20:15
369 查看
在JavaScript 里,被继承的函数称为超类型(父类,基类也行,其他语言叫法),继承的
函数称为子类型(子类,派生类)。继承也有之前问题,比如字面量重写原型会中断关系,使
用引用类型的原型,并且子类型还无法给超类型传递参数。
为了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或
者成为对象冒充(伪造对象、经典继承)的技术来解决这两种问题。
借用构造函数虽然解决了函数本身的继承,但没有继承原型链。所以,我们需要原型链+借用构造函数的模式,这种模式称为组合继承。
方法一:
缺点:引用类型,在操作对象原型时候,直接改变堆内存中对象的方法
方法二:
这种继承借助原型并基于已有的对象创建新对象,同时还不必因此创建自定义类型,但是构造函数两次继承,不是很好
方法三:
使用a原型对象及其属性去创建一个新的对象,并将这个对象的constructor指向B函数本身,不存在重复继承的问题
方法四:
将a的原型链遍历给b对象,实现原型的深度拷贝,双方互不影响
函数称为子类型(子类,派生类)。继承也有之前问题,比如字面量重写原型会中断关系,使
用引用类型的原型,并且子类型还无法给超类型传递参数。
为了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或
者成为对象冒充(伪造对象、经典继承)的技术来解决这两种问题。
function aObj(){ this.name = ['小红','小强']; } } aObj.prototype.showname = ()=>{ alert(this.name) } function bObj(){ aObj.call(this); //只针对构造函数本身的继承 还需要继承原型 }
借用构造函数虽然解决了函数本身的继承,但没有继承原型链。所以,我们需要原型链+借用构造函数的模式,这种模式称为组合继承。
方法一:
bObj.prototype = aObj.prototype;
缺点:引用类型,在操作对象原型时候,直接改变堆内存中对象的方法
方法二:
bObj.prototype = new aObj();
这种继承借助原型并基于已有的对象创建新对象,同时还不必因此创建自定义类型,但是构造函数两次继承,不是很好
方法三:
bObj.prototype = Object.create(aObj.prototype); bObj.prototype.constructor = bObj
使用a原型对象及其属性去创建一个新的对象,并将这个对象的constructor指向B函数本身,不存在重复继承的问题
方法四:
for (var i in aObj.prototype) { bObj.prototype[i] = aObj.prototype[i]; }
将a的原型链遍历给b对象,实现原型的深度拷贝,双方互不影响
相关文章推荐
- 【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法
- 覆盖equals方法的权宜之计,组合优于继承
- Scala深入浅出进阶经典 第41讲:List继承体系实现内幕和方法操作源码揭秘
- 覆盖equals方法的权宜之计,组合优于继承
- 第5章 面向对象编程进阶--类的继承、多态、初始化块、final(类)、抽象(类、方法)、接口(继承)
- Golang中匿名组合实现伪继承的方法
- python进阶学习笔记(四)——python中访问限制、创建类属性、定义实例方法、定义类方法、类的继承
- 第5章 面向对象编程进阶--类的继承、多态、初始化块、final(类)、抽象(类、方法)、接口(继承)
- 如何实现在已有代码之后添加逻辑之继承,组合(静态代理)实现方法
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- 继承有几种方式,分别是什么,想要实现继承可以使用哪些方法
- 026--静态属性、类方法、静态方法、组合、继承
- C++菜鸟进阶—>什么时候使用继承和组合
- Java基础进阶_day02_(类的组合,继承,this与super关键字)
- .NET重构(四):窗体继承+模板方法,完美实现组合查询
- Python 进阶_OOP 面向对象编程_组合与继承