推荐使用 extends 继承扩展,子类可继承构造函数、实例及静态方法,需调用 super(),支持重写与新增;不可动态修改已声明 class 的继承关系;避免直接扩展内置类原型;优先选用 mixin、组合封装或工具函数。

可以,但方式有限制且需注意安全性。
用 extends 继承扩展是标准且推荐的做法
ES6 的 class 语法明确支持通过 extends 创建子类,这是最安全、最符合语义的扩展方式:
- 子类能继承父类的构造函数、实例方法和静态方法
- 必须在子类构造函数中调用
super()初始化父类上下文 - 可重写父类方法,也可添加新方法或属性
- 不污染原类原型,不影响其他代码
不能在声明后用 class 语法动态添加父类
JavaScript 的 class 声明是语法糖,其原型对象(prototype)默认不可重新赋值,也不支持运行时“修改继承关系”:
- 无法像函数那样后期修改
MyClass.prototype = new Parent() - 不能给已存在的 class 补充
extends Parent—— 类的继承链在定义时就固定了 - 试图直接改写
MyClass.prototype.__proto__属于非标准操作,行为不可靠,不推荐
扩展内置类(如 Array、String)风险高,应避免直接修改 prototype
虽然技术上可通过 Array.prototype.myMethod = ... 添加方法,但现代开发中强烈不建议:
- 可能与未来 ECMAScript 标准新增同名方法冲突
- 破坏 polyfill 或第三方库的预期行为
- 某些内置原型属性被设为
configurable: false,强行修改会静默失败或报错 - 更安全的替代方案是封装(如
class SmartArray extends Array)或工具函数
需要灵活增强时,优先考虑组合、Mixin 或代理模式
当继承不适用(比如想给多个无关类添加相同能力),可用更现代、更可控的方式:
-
Mixin:把方法抽成纯函数,用
Object.assign或装饰器混入类 -
组合封装:新建类持有原实例,通过代理暴露并增强接口(如
new FilterableArray([1,2,3])) -
静态工具类:不侵入原型,提供独立函数如
ArrayUtils.unique(arr)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











