当前位置:首页 > JavaScript

实现继承 js

2026-02-02 04:59:44JavaScript

原型链继承

通过原型链实现继承是 JavaScript 中最基础的继承方式。子类的原型对象指向父类的实例,从而继承父类的属性和方法。

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 方法在子类构造函数中调用父类构造函数,实现属性继承。这种方式不会继承父类原型上的方法。

function Parent(name) {
  this.name = name;
}
function Child(name) {
  Parent.call(this, name);
}

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

组合继承

结合原型链继承和构造函数继承的优点,既继承原型方法又继承实例属性。这是最常用的继承方式。

实现继承 js

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;
}
Child.prototype = new Parent();
Child.prototype.constructor = Child;

const child = new Child('child', 10);
child.sayName(); // 输出: child

原型式继承

基于已有对象创建新对象,使用 Object.create() 方法实现。适合不需要单独构造函数的场景。

const parent = {
  name: 'parent',
  sayName: function() {
    console.log(this.name);
  }
};

const child = Object.create(parent);
child.name = 'child';
child.sayName(); // 输出: child

寄生式继承

在原型式继承基础上增强对象,添加额外方法。这种方式类似于工厂模式。

实现继承 js

function createChild(parent) {
  const child = Object.create(parent);
  child.sayAge = function() {
    console.log(this.age);
  };
  return child;
}

const parent = { name: 'parent' };
const child = createChild(parent);
child.age = 10;
child.sayAge(); // 输出: 10

寄生组合式继承

最理想的继承方式,避免了组合继承中调用两次父类构造函数的问题。通过寄生方式继承原型,通过构造函数继承实例属性。

function inheritPrototype(child, parent) {
  const prototype = Object.create(parent.prototype);
  prototype.constructor = child;
  child.prototype = prototype;
}

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;
}
inheritPrototype(Child, Parent);

const child = new Child('child', 10);
child.sayName(); // 输出: child

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;
  }
}

const child = new Child('child', 10);
child.sayName(); // 输出: child

标签: js
分享给朋友:

相关文章

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…