支持动态扩展prototype,但不可修改继承关系;可通过classname.prototype.新方法添加实例方法,适用于自定义类,不推荐扩展内置类;mixin、参数化class等是更安全的替代方案。

支持,但方式有限制,不能改变继承关系,只能在原型上添加方法或属性。
可以动态扩展 prototype
类本质仍是基于原型的对象,定义后可通过 ClassName.prototype.新方法 = function() {} 添加实例方法,所有已有和后续创建的实例都能使用:
- 新增的方法会挂载到原型链上,不影响已有实例结构
- 适用于自定义类,也适用于内置类(但不推荐扩展内置类)
- 例如:
MyClass.prototype.logInfo = function() { console.log(this); };
不能动态修改继承链
class 的继承关系在声明时就固定,运行时无法给已存在的 class 补充 extends 或更换父类:
- 不能执行类似
MyClass extends NewParent这样的语法重定义 - 试图手动改写
MyClass.prototype.__proto__属于非标准操作,行为不可靠 - ES6 class 是语法糖,其构造函数和原型绑定在定义阶段完成
替代方案更安全实用
若需灵活复用逻辑,优先考虑组合而非强行“动态继承”:
- 用 Mixin 混入通用方法(如通过 Object.assign 给 prototype 批量添加)
- 用函数返回动态 class 表达式,实现参数化构建(如根据配置生成不同行为的类)
- 封装工具函数或独立模块,避免污染类原型
扩展内置类风险高
虽然技术上能写 Array.prototype.flattenDeep = ...,但现代开发中应避免:
- 可能与未来标准冲突,引发兼容性问题
- 影响全局环境,其他依赖可能意外调用该方法
- 团队协作中不易追踪,调试成本上升
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











