首先需要理解组合继承与寄生继承:
组合继承是使用原型链继承共享的属性和方法,通过构造函数继承实例属性。通过在子类通过call改变this环境调用父类,使得子类获取父类的属性(此时只是获取了父类的属性,不能获取父类原型上的方法)。同时将子类的prototype属性指向新建的父类实例(此时子类的prototype为父类新建实例),以实现继承父类prototy上的方法。同时会将子类的prototyp.constructor指向子类以保证子类实例的instanceof方法不会出错。
寄生继承可以简单理解为是对向的浅继承,es5提供create方法可实现。
组合式继承时需要调用两次父类构造函数(红字时以及新建子类实例对象时),事实上我们没必要在上述红字部分时新建父类实例,只需要将子类的prototype属性指向父类的寄生式继承对象即可。此方法高效的原因在于省去了子类的prototype上创建不必要的属性。代码如下:
- function SuperType(name){
- this.name = name;
- this.colors = ["red","blue","green"];
- }
- SuperType.prototype.sayName = function(){
- alert(this.name);
- }
- function SubType(name,age){
- SuperType.call(this,name);//第二次调用SuperType()
- this.age = age;
- }
- SubType.prototype = new SuperType();//第一次调用SuperType()
- SubType.prototype.sayAge = function(){
- alert(this.age);
- }
本文详细介绍了JavaScript中组合式继承与寄生继承的概念及其实现方式。组合式继承结合了原型链继承和构造函数继承的优点,使得子类能够继承父类的方法和属性。寄生继承则类似于对象的浅拷贝,可以通过ES5提供的Object.create方法来实现。
748

被折叠的 条评论
为什么被折叠?



