当前位置:首页 > JavaScript

js prototype 实现

2026-02-01 13:16:30JavaScript

理解 JavaScript 原型链

JavaScript 是一种基于原型的语言,每个对象都有一个原型对象,对象从原型继承属性和方法。原型链是 JavaScript 实现继承的核心机制。

创建对象并使用原型

通过构造函数创建对象时,新对象的原型会指向构造函数的 prototype 属性。例如:

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

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}`);
};

const person1 = new Person('Alice');
person1.greet(); // 输出: Hello, my name is Alice

原型链继承

通过将子类的原型指向父类的实例,可以实现继承:

js prototype 实现

function Student(name, grade) {
  Person.call(this, name); // 调用父类构造函数
  this.grade = grade;
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

Student.prototype.study = function() {
  console.log(`${this.name} is studying in grade ${this.grade}`);
};

const student1 = new Student('Bob', 5);
student1.greet(); // 输出: Hello, my name is Bob
student1.study(); // 输出: Bob is studying in grade 5

使用 Object.setPrototypeOf

ES6 提供了 Object.setPrototypeOf 方法直接设置对象的原型:

const animal = {
  eat() {
    console.log(`${this.name} eats`);
  }
};

const dog = {
  name: 'Rex',
  bark() {
    console.log(`${this.name} barks`);
  }
};

Object.setPrototypeOf(dog, animal);
dog.eat(); // 输出: Rex eats
dog.bark(); // 输出: Rex barks

原型链的终点

所有对象的原型链最终指向 Object.prototype,而 Object.prototype 的原型是 null

js prototype 实现

console.log(Object.getPrototypeOf(Object.prototype)); // 输出: null

检查原型关系

使用 instanceof 运算符可以检查对象是否在原型链上:

console.log(student1 instanceof Student); // true
console.log(student1 instanceof Person); // true
console.log(student1 instanceof Object); // true

避免直接修改内置原型

虽然可以修改内置对象的原型(如 Array.prototype),但这通常是不推荐的,因为它可能导致不可预测的行为:

Array.prototype.customMethod = function() {
  console.log('Custom array method');
};

const arr = [1, 2, 3];
arr.customMethod(); // 输出: Custom array method

性能考虑

过长的原型链会影响性能,因为查找属性时需要遍历整个链。尽量保持原型链简洁。

标签: jsprototype
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现选项卡

js实现选项卡

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

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…