javascript通过原型链实现继承需三步:一是用object.create(parent.prototype)设置child.prototype并重置constructor;二是子类构造函数中用parent.call(this, ...)继承自有属性;三是子类方法内用parent.prototype.method.call(this)调用父类同名方法。

JavaScript 中通过原型链实现子类调用父类方法,核心是让子类的 prototype 正确指向父类实例,并在需要时显式调用父类构造函数或方法。
设置子类原型为父类实例
这是建立原型链的关键一步。子类的 prototype 必须是父类的一个实例(而非空对象),这样子类实例才能沿原型链访问父类原型上的方法。
- 使用
Object.create(Parent.prototype)创建干净的原型对象,避免直接 new Parent() 可能触发副作用 - 重设子类 prototype 的
constructor指回子类,否则会指向父类 - 示例:Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
在子类构造函数中调用父类构造函数
子类实例要拥有父类定义的自有属性(如 this.name),必须在子类构造函数中用 Parent.call(this, ...) 显式执行父类初始化逻辑。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
call或apply改变父类函数内部this指向子类实例 - 不调用会导致子类实例缺少父类构造函数中挂载的属性
- 示例:function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
在子类方法中调用父类同名方法
当子类重写了父类方法但仍需复用父类逻辑时,可通过 Parent.prototype.methodName.call(this, ...) 显式调用父类版本。
- 不能直接写
this.__proto__.__proto__.methodName()—— 不可靠且破坏封装 - 推荐在子类方法内用
Parent.prototype.xxx.call(this)精准调用 - 若用 ES6 class,可用
super.xxx(),但底层仍是基于上述原型链机制
验证原型链是否正确
可通过 instanceof 和 isPrototypeOf 检查继承关系是否生效。
-
new Child() instanceof Parent应为true -
Parent.prototype.isPrototypeOf(new Child())应为true - 打印
new Child().__proto__.__proto__ === Parent.prototype确认原型链连通
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










