当前位置:首页 > JavaScript

实现一个js原型继承

2026-03-02 01:05:02JavaScript

原型继承的基本概念

在JavaScript中,每个对象都有一个内部属性[[Prototype]],通常通过__proto__Object.getPrototypeOf()访问。原型继承允许对象从另一个对象继承属性和方法。

构造函数方式实现原型继承

通过构造函数和prototype属性实现继承:

实现一个js原型继承

function Parent(name) {
  this.name = name;
}
Parent.prototype.sayHello = function() {
  console.log(`Hello, ${this.name}`);
};

function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

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

ES6 class语法实现继承

使用ES6的classextends关键字更简洁:

实现一个js原型继承

class Parent {
  constructor(name) {
    this.name = name;
  }
  sayHello() {
    console.log(`Hello, ${this.name}`);
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }
}

const child = new Child('Bob', 12);
child.sayHello(); // 输出: Hello, Bob

Object.create实现纯对象继承

直接通过对象之间的继承:

const parent = {
  greet() {
    console.log(`Hi, ${this.name}`);
  }
};

const child = Object.create(parent);
child.name = 'Charlie';
child.greet(); // 输出: Hi, Charlie

原型链的注意事项

修改子类原型时需保持原型链完整:

Child.prototype.newMethod = function() {
  console.log(`Age: ${this.age}`);
};

避免直接修改__proto__属性,这会带来性能问题。优先使用Object.create()class语法。

标签: 原型js
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js 实现进度条

js 实现进度条

使用 HTML 和 CSS 创建基础结构 进度条需要一个容器和一个填充元素。HTML 结构可以简单如下: <div class="progress-container"> <d…

vue.js实现拍照

vue.js实现拍照

Vue.js 实现拍照功能 在 Vue.js 中实现拍照功能通常需要结合浏览器的媒体 API(如 getUserMedia)和 Canvas 元素。以下是实现步骤: 准备工作 确保项目已安装 Vue…