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

发布时间 - 2026-01-11 02:59:00    点击率:

在之前javascript面向对象系列的文章里面,我们已经探讨了组合继承和寄生继承,回顾下组合继承:

function Person( uName ){
      this.skills = [ 'php', 'javascript' ];
      this.userName = uName;
    }
    Person.prototype.showUserName = function(){
      return this.userName;
    }
    function Teacher ( uName ){
      Person.call( this, uName );
    }
    Teacher.prototype = new Person();

    var oT1 = new Teacher( 'ghostwu' );
    oT1.skills.push( 'linux' );
    var oT2 = new Teacher( 'ghostwu' );
    console.log( oT2.skills ); //php,javascript
    console.log( oT2.showUserName() ); //ghostwu

组合继承有个缺点,父类的构造函数会被调用两次.

第11行,设置子类原型对象(prototype),调用了第一次

第9行,实例化对象的时候,又调用一次

构造函数的目的是为了复制属性,第9行肯定是不能少的,第11行的目的是为了获取到父类原型对象(prototype)上的方法,基于这个目的,有没有别的方法

可以做到 在不需要实例化父类构造函数的情况下,也能得到父类原型对象上的方法呢? 当然可以,我们可以采用寄生式继承来得到父类原型对象上的方法

function Person( uName ){
      this.skills = [ 'php', 'javascript' ];
      this.userName = uName;
    }
    Person.prototype.showUserName = function(){
      return this.userName;
    }
    function Teacher ( uName ){
      Person.call( this, uName );
    }

    function object( o ){
      var G = function(){};
      G.prototype = o;
      return new G();
    }

    function inheritPrototype( subObj, superObj ){
      var proObj = object( superObj.prototype ); //复制父类superObj的原型对象
      proObj.constructor = subObj; //constructor指向子类构造函数
      subObj.prototype = proObj; //再把这个对象给子类的原型对象
    }

    inheritPrototype( Teacher, Person );

    var oT1 = new Teacher( 'ghostwu' );
    oT1.skills.push( 'linux' );
    var oT2 = new Teacher( 'ghostwu' );
    console.log( oT2.skills ); //php,javascript
    console.log( oT2.showUserName() ); //ghostwu

其实,说白了寄生组合式继承就是一个借用构造函数 + 相当于浅拷贝父类的原型对象

以上这篇[js高手之路]寄生组合式继承的优势详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# js  # 寄生组合式继承  # 简单谈谈JavaScript寄生式组合继承  # Javascript组合继承方法代码实例解析  # 实例介绍JavaScript中多种组合继承  # JavaScript寄生组合式继承原理与用法分析  # JavaScript类的继承方法小结【组合继承分析】  # JavaScript寄生组合式继承实例详解  # [js高手之路]从原型链开始图解继承到组合继承的产生详解  # js常用的继承--组合式继承  # JS继承之借用构造函数继承和组合继承  # JavaScript组合继承详解  # 子类  # 给大家  # 是为了  # 有个  # 不需要  # 也能  # 两次  # 我们可以  # 之路  # 希望能  # 这篇  # 说白了  # 再把  # 小编  # 可以做到  # 不能少  # 大家多多  # 面向对象  # 情况下  # return 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  lovemo网页版地址 lovemo官网手机登录  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何在阿里云通过域名搭建网站?  香港网站服务器数量如何影响SEO优化效果?  大连网站制作公司哪家好一点,大连买房网站哪个好?  Python文件操作最佳实践_稳定性说明【指导】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  如何在万网ECS上快速搭建专属网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何快速搭建二级域名独立网站?  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel如何生成URL和重定向?(路由助手函数)  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  JavaScript如何实现继承_有哪些常用方法  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Linux系统命令中screen命令详解  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  如何快速建站并高效导出源代码?  如何利用DOS批处理实现定时关机操作详解  Java遍历集合的三种方式  如何用好域名打造高点击率的自主建站?  Laravel中的Facade(门面)到底是什么原理  如何在建站之星绑定自定义域名?  如何确认建站备案号应放置的具体位置?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  HTML 中动态设置元素 name 属性的正确语法详解  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何快速生成凡客建站的专业级图册?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Swift中循环语句中的转移语句 break 和 continue  如何用PHP快速搭建CMS系统?  Python数据仓库与ETL构建实战_Airflow调度流程详解  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  浅谈Javascript中的Label语句  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  北京网站制作的公司有哪些,北京白云观官方网站?  文字头像制作网站推荐软件,醒图能自动配文字吗?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何快速搭建高效WAP手机网站吸引移动用户?