JavaScript原型链继承测试需验证实例行为是否符合预期:检查instanceof/isPrototypeOf、方法调用与覆盖、属性查找顺序、constructor指向,并覆盖ES6 class、寄生组合式及函数借用等不同继承模式。

JavaScript 原型链的继承关系本身不涉及运行时副作用,单元测试重点不是“测语法是否写对”,而是验证 实例行为是否符合预期继承逻辑:比如子类实例能否访问父类原型方法、是否正确屏蔽/重写属性、instanceof 和 isPrototypeOf 是否成立、构造函数是否指向正确等。
验证 instanceof 和 isPrototypeOf 关系
这是最直接反映原型链是否构建成功的断言。需确保子类实例既是子类类型,也是父类类型。
- 用
expect(childInstance instanceof Parent).toBe(true)验证继承链存在 - 用
expect(Parent.prototype.isPrototypeOf(childInstance)).toBe(true)更底层地确认原型链接 - 注意:若使用
Object.setPrototypeOf()动态修改,也要在测试中覆盖该场景
验证方法和属性的可访问性与遮蔽行为
测试实例能否调用继承来的方法,以及子类是否能正确覆盖父类同名方法或属性。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 调用继承方法:
expect(childInstance.inheritedMethod()).toBe("from parent") - 验证覆盖行为:若子类重写了
toString,应返回子类实现,而非父类默认结果 - 检查属性查找顺序:给子类实例自身添加同名属性后,应优先读取实例属性,而非原型属性(可用
hasOwnProperty辅助判断)
验证 constructor 属性的准确性
手动设置原型(如 Child.prototype = Object.create(Parent.prototype))后容易丢失 constructor 指向,必须显式修复并测试。
立即学习“Java免费学习笔记(深入)”;
- 修复方式:
Child.prototype.constructor = Child - 测试:
expect(childInstance.constructor).toBe(Child)和expect(Child.prototype.constructor).toBe(Child) - 若用 ES6 class,此问题自动解决,但仍建议测试以保障兼容性假设
覆盖不同继承写法的测试用例
实际项目中可能混合使用多种继承模式,每种都需独立验证。
-
ES6 class 继承:测试
super()调用、静态方法继承、new.target行为 -
寄生组合式继承(推荐):重点测
Object.create(Parent.prototype)后的原型干净性,避免污染父类原型 - 函数借用 + 原型链(如 call + prototype = ...):需额外验证实例属性是否正确初始化,且不干扰原型方法共享

















