当前位置:首页 > JavaScript

实现一种js原型继承

2026-04-05 03:10:35JavaScript

原型继承的基本概念

JavaScript中的原型继承是通过原型链实现的。每个对象都有一个内部属性[[Prototype]],指向其原型对象。当访问对象的属性时,如果对象本身没有该属性,JavaScript会沿着原型链向上查找。

实现一种js原型继承

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

定义一个父构造函数,通过new关键字创建实例。子构造函数通过调用父构造函数并设置子构造函数的原型为父构造函数的实例来实现继承。

实现一种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 = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

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

Object.create()实现原型继承

使用Object.create()方法创建一个新对象,并将新对象的原型指向指定的对象。这种方法更简洁,适用于不需要构造函数的场景。

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

const child = Object.create(parent);
child.name = 'Child';
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('Bob', 12);
child.sayName(); // 输出: Bob

原型继承的优缺点

原型继承的优点是内存效率高,因为属性和方法可以被多个实例共享。缺点是原型链过长时会影响性能,且子类无法直接访问父类的私有属性。

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

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现

js实现

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

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现预览

js实现预览

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

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…