当前位置:首页 > JavaScript

实现一个js原型继承

2026-03-02 01:05:02JavaScript

原型继承的基本概念

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

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

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

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关键字更简洁:

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实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现选项卡

js实现选项卡

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

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 j…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="my…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…