J*aScript中如何实现继承_ES5和ES6继承方式对比


ES5继承靠构造函数借用和原型链组合实现,ES6用class/extends/super语法糖并自动建立完整原型链与静态继承。

javascript中如何实现继承_es5和es6继承方式对比

ES5继承:靠构造函数和原型链配合

ES5没有class关键字,实现继承主要靠组合使用构造函数借用(call/apply)和原型链继承。核心思路是:子类实例先拥有父类的实例属性,再让子类原型指向父类原型的副本,从而共享方法。

常见写法(寄生组合式继承,最推荐):

function Parent(name) {
  this.name = name;
}
Parent.prototype.say = function() {
  console.log('Hello from ' + this.name);
};

function Child(name, age) {
  Parent.call(this, name); // 借用构造函数,继承实例属性
  this.age = age;
}

// 关键:用Object.create(Parent.prototype)避免调用Parent构造函数
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child; // 修复constructor指向

Child.prototype.play = function() {
  console.log(this.name + ' is playing');
};

⚠️ 注意点:

  • 不手动设置Child.prototype = Parent.prototype,否则修改子类原型会影响父类
  • 必须重设constructor,否则new Child().__proto__.constructor会指向Parent
  • 无法继承父类的静态方法(如Parent.staticMethod = () => {}),需额外拷贝

ES6继承:class + extends + super,语法更清晰

ES6引入class语法糖,但本质仍是基于原型的继承。使用extends声明继承关系,子类构造函数中必须调用super()——它负责初始化this并连接原型链。

立即学习“J*a免费学习笔记(深入)”;

class Parent {
  constructor(name) {
    this.name = name;
  }
  say() {
    console.log('Hello from ' + this.name);
  }
  static create() {
    return new Parent('default');
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name); // 必须!相当于Parent.call(this, name)
    this.age = age;
  }
  play() {
    console.log(this.name + ' is playing');
  }
  // 静态方法也能被继承
  static build() {
    return new Child('test', 10);
  }
}

✅ 优势明显:

QoQo QoQo

QoQo是一款专注于UX设计的AI工具,可以帮助UX设计师生成用户角色卡片、用户旅程图、用户访谈问卷等。

QoQo 172 查看详情 QoQo
  • 语法简洁,语义明确,“继承”意图一目了然
  • 自动建立正确的原型链:Child.__proto__ === Parent(静态继承),Child.prototype.__proto__ === Parent.prototype(实例方法继承)
  • 支持继承父类静态方法和getter/setter
  • 子类构造函数中不调用super()会直接报错,强制规范流程

关键差异对比:不只是写法不同

表面上是语法糖,底层机制有实质性区别:

  • 原型链建立时机不同:ES5靠手动赋值Child.prototype = ...;ES6在extends时就自动设置好Child.prototype.__proto__和Child.__proto__
  • this绑定逻辑不同:ES5中this在子构造函数里已存在;ES6中子类构造函数里,this在super()执行前是未初始化的,直接访问会报ReferenceError
  • 静态成员继承支持:ES6原生支持Child.staticMethod继承Parent.staticMethod;ES5需手动赋值Child.staticMethod = Parent.staticMethod
  • 可扩展性:ES6 class支持get/set、static、private #field等特性,ES5模拟成本高且不统一

实际开发建议

新项目一律用ES6 class继承。ES5写法仅需了解,用于阅读老代码或兼容极旧环境(如IE)。

遇到报错Must call super constructor in derived class before accessing 'this'?说明忘了在子类constructor第一行写super()。

想在子类中调用父类同名方法?用super.methodName(),这是ES6新增的语法,ES5得写Parent.prototype.methodName.call(this)。

基本上就这些。理解原型链本质,再看class语法,就不会被“语法糖”三个字带偏了。

以上就是J*aScript中如何实现继承_ES5和ES6继承方式对比的详细内容,更多请关注其它相关文章!


# 这是  # 网站建设教程b  # 推广营销软件哪个好用些  # 广东营销推广要多久学完  # seo哪家经验丰富  # 营销推广形式有哪几种  # 小媒体营销推广文案案例  # 提供全渠道营销推广图片  # 信阳网站建设的要求  # 迪庆网站建设机构电话  # 网站建设途径有哪些  # 二叉树  # 链表  # javascript  # 防抖  # 回调  # 会报  # 报错  # 数据结构  # 如何实现  # 子类  # 区别  # access  # app  # java  # es6 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 小米civi如何设置锁屏时间  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  mysql怎么查询数据_mysql基础查询语句使用教程  Go语言反射机制:如何访问被嵌入结构体遮蔽的方法  excel怎么计算平均值 excel平均函数*ERAGE使用教学  b站如何管理订阅_b站订阅标签分类管理  支付宝如何解绑云闪付_支付宝与云闪付账户关联解除方法  《雅迪智行》用手机开锁方法  实现二叉树的层序插入:基于树大小的路径导航  从J*a应用程序中导出MySQL表数据的技术指南  小红书网页版怎么进 小红书网页版通用入口  智慧职教mooc平台登录网址 智慧职教mooc官网直达  Linux如何自动分析系统异常日志_Linux日志智能检测  哈尔滨城市通昵称修改方法  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  TikTok视频播放不流畅怎么办 TikTok视频播放优化方法  如何在vscode中关闭it环境  咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  b站怎么查看视频的码率_b站视频码率查看方法  风神瞳获取全攻略  惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置  国际经济与贸易就业方向解析  如何通过settings.json个性化您的VS Code体验  深入理解J*aScript异步操作:setTimeout与调用栈的真相  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  如何配置VS Code作为您Git操作的默认编辑器  TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法  英国搜索:多数英国人认为语言搜索是未来搜索  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  Vue 3中独立响应式实例的创建与应用  秋风萧瑟洪波涌起中的萧瑟指的是什么  《大润发优鲜》充值方法介绍  《红果免费短剧》下载观看方法  支付宝登录刷脸不是本人如何解决  汽车之家网页版免费登录_汽车之家官网首页直接进入  《深林》冬季章节图文攻略  百度识图图像分析 百度识图识别平台  太平年在哪个平台播出  WPS文字如何进行简繁转换  Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧  快手极速版在线体验区 快手极速版网页体验入口  windows10怎么开启卓越性能_windows10电源选项代码激活  《微信》视频号原创声明开启方法  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  酷狗音乐多音轨设置教程 

 2025-12-16

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.