当前位置:首页 > JavaScript

js 实现继承

2026-04-03 18:17:31JavaScript

原型链继承

通过让子类的原型对象指向父类的实例来实现继承。子类实例可以通过原型链访问父类的属性和方法。

function Parent() {
  this.name = 'parent';
}
Parent.prototype.sayName = function() {
  console.log(this.name);
};

function Child() {}
Child.prototype = new Parent(); // 关键步骤

const child = new Child();
child.sayName(); // 'parent'

缺点:所有子类实例共享同一个父类实例的属性,修改引用类型属性会影响其他实例。

构造函数继承

在子类构造函数中调用父类构造函数,使用call或apply方法改变this指向。

function Parent(name) {
  this.name = name;
}

function Child(name) {
  Parent.call(this, name); // 关键步骤
}

const child = new Child('child');
console.log(child.name); // 'child'

缺点:无法继承父类原型上的方法和属性。

组合继承

结合原型链继承和构造函数继承,既通过构造函数继承实例属性,又通过原型链继承原型方法。

function Parent(name) {
  this.name = name;
}
Parent.prototype.sayName = function() {
  console.log(this.name);
};

function Child(name) {
  Parent.call(this, name); // 继承实例属性
}
Child.prototype = new Parent(); // 继承原型方法

const child = new Child('child');
child.sayName(); // 'child'

缺点:调用了两次父类构造函数,子类原型上会有多余的父类实例属性。

寄生组合继承

目前最理想的继承方式,通过Object.create创建父类原型的副本作为子类原型。

function Parent(name) {
  this.name = name;
}
Parent.prototype.sayName = function() {
  console.log(this.name);
};

function Child(name) {
  Parent.call(this, name);
}
Child.prototype = Object.create(Parent.prototype); // 关键步骤
Child.prototype.constructor = Child; // 修复构造函数指向

const child = new Child('child');
child.sayName(); // 'child'

ES6类继承

使用class和extends语法糖实现继承,本质仍是基于原型链。

js 实现继承

class Parent {
  constructor(name) {
    this.name = name;
  }
  sayName() {
    console.log(this.name);
  }
}

class Child extends Parent {
  constructor(name) {
    super(name); // 必须调用super
  }
}

const child = new Child('child');
child.sayName(); // 'child'

ES6类继承解决了传统继承方式的多个问题,是最推荐的继承实现方式。

标签: js
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…