实现一种js原型继承
原型继承的基本概念
原型继承是JavaScript中实现对象间共享属性和方法的重要机制。每个JavaScript对象都有一个内部链接指向另一个对象(原型),当访问对象的属性时,如果对象本身没有该属性,会沿着原型链向上查找。
构造函数与原型链
通过构造函数创建对象时,其原型对象(prototype)会被实例的__proto__属性引用。继承的本质是让子类的原型对象指向父类的实例,从而形成原型链。

function Parent(name) {
this.name = name;
}
Parent.prototype.sayName = function() {
console.log(this.name);
};
function Child(name, age) {
Parent.call(this, name); // 调用父类构造函数
this.age = age;
}
实现原型继承的步骤
方法1:直接继承原型
将子类的prototype指向父类的实例,但会导致父类属性被所有子类实例共享。

Child.prototype = new Parent(); // 继承父类原型
Child.prototype.constructor = Child; // 修复构造函数指向
方法2:使用Object.create
ES5引入的Object.create能更安全地创建原型链,避免调用父类构造函数时产生副作用。
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
方法3:ES6的class语法
ES6的class和extends关键字简化了原型继承的实现,底层仍基于原型链。
class Parent {
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
}
class Child extends Parent {
constructor(name, age) {
super(name); // 调用父类构造函数
this.age = age;
}
}
注意事项
- 构造函数修正:手动继承原型时需修正
constructor属性,避免实例的constructor指向父类。 - 方法覆盖:子类可通过重写原型方法实现多态,但需注意调用父类方法时使用
super。 - 性能影响:过长的原型链会影响属性查找效率,建议层级不超过3层。
通过上述方法,可以灵活实现JavaScript的原型继承,根据需求选择适合的方案。





