我理解的寄生组合式继承

寄生组合式继承,即通过借用构造函数来继承属性,通过原型链的混成形式来继承方法。其背后的基本思路是:不必为了指定子类型的原型而调用超类型的构造函数,我们所需要的无非就是超类型 原型的一个副本而已。本质上,就是使用寄生式继承来继承超类型的原型,然后再将结果指定给子类型 的原型。

代码如下:

function inheritPrototype(subType, superType){
var prototype = object(superType.prototype);      //创建super副本
prototype.constructor = subType;    //  重新创建副本的constructor
subType.prototype = prototype;     //   将副本的原型赋给sub
}

以上的描述根据《JS高级程序设计》的描述做了修改和自己的理解。

或许理解还有不到位或偏差的地方,以后再做修改。

时间: 2024-08-08 09:29:28

我理解的寄生组合式继承的相关文章

JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象JS基础讲解,工厂模式.构造函数模式.原型模式.混合模式.动态原型模式>,接下来讲一般通过那些方法完成JavaScript的继承. 原型链 JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下

[js高手之路]寄生组合式继承的优势

在之前javascript面向对象系列的文章里面,我们已经探讨了组合继承和寄生继承,回顾下组合继承: 1 function Person( uName ){ 2 this.skills = [ 'php', 'javascript' ]; 3 this.userName = uName; 4 } 5 Person.prototype.showUserName = function(){ 6 return this.userName; 7 } 8 function Teacher ( uName

JavaScript中的继承之寄生组合式继承

先说说组合继承.最常用的继承方式组合继承,其最大的问题是无论在什么情况下,都会调用两次超类型的构造函数:一次是在创建子类原型的时候,另一次是在子类型构造函数内部. 组合继承是通过原型继承方法和原型属性,构造函数继承实例属性.但子类通过原型也继承了超类型的全部实例属性(方法暂且不说),即超类的实例属性成为子类的原型属性,所以不得不在调用子类构造函数时重写这些属性.也就是说在子类的原型对象上继承来自超类的实例属性完全是多余的. 看一个组合继承的例子. function SuperType(name)

JS继承 -- 寄生式继承 &amp; 寄生组合式继承

5.寄生式继承 与寄生构造函数和工厂模式类似,创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后返回对象. function createAnother(original){ var clone = Object.create(original); //通过调用函数创建一个新对象 clone.sayHi = function(){ //以某种方式来增强这个对象 alert("Hi"); }; return clone; //返回这个对象 } var person

javascript寄生组合式继承

下面是javascript寄生组合式继承源代码,选自这里.讲解请见我所加注释: function creatObject(o){//该函数是为了创建原型链对象所用,传入值o为一个function F(){}//新建函数 F.prototype = o;//设置该函数的原型属性为传入对象 return new F();//调用该函数后返回链式对象F.prototype=o; } function inheritPrototype(subType, superType){//用于设置对象属性 var

组合继承 和 原型式继承、寄生组合式继承

//以下代码均摘自 Nicholas C.Zakas<Professional JavaScript for Web Developers> //组合继承实例代码: function SuperType(name) {     this.name = name;     this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function() 

[javascript高手之路]寄生组合式继承的优势

在之前javascript面向对象系列的文章里面,我们已经探讨了组合继承和寄生继承,回顾下组合继承: function Person( uName ){             this.skills = [ 'php', 'javascript' ];             this.userName = uName;         }         Person.prototype.showUserName = function(){             return this.u

JavaScript寄生组合式继承分析

JavaScript寄生组合式继承特点: 避免了在子类prototype上创建不必要多余的属性,相比直接继承基类的实例效率要高. 是JavaScript 实现继承的最有效方式. <script> //定义基类构造函数和属性 function BaseClass(name,age){ this.name=name; this.age=age; } //在基类原型上添加sayName方法 BaseClass.prototype.sayName=function(){ console.log(thi

组合继承与寄生组合式继承

组合继承 将原型链和借用构造函数的技术组合到一块. 使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承. 超类的属性被继承了两次,一次是在子类的构造函数中,使得子类实例拥有各自的属性:一次是在子类的原型中,使得子类拥有相同的属性. 1 function SuperType(name){ 2 this.name = name; 3 this.colors = ["red","blue","green"]; 4 } 5 S