当前位置:首页 > JavaScript

js原型实现

2026-04-06 10:40:57JavaScript

原型的概念

在JavaScript中,每个对象都有一个原型(prototype),原型本身也是一个对象。原型用于实现继承和共享属性、方法。通过原型链,对象可以访问其原型上的属性和方法。

原型的基本使用

通过构造函数创建对象时,新对象的原型会指向构造函数的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

原型链的查找机制

当访问对象的属性或方法时,JavaScript引擎会先在对象自身查找。如果找不到,会沿着原型链向上查找,直到找到或到达原型链的顶端(null)。

console.log(person1.hasOwnProperty('name')); // true
console.log(person1.hasOwnProperty('greet')); // false

修改原型

可以直接修改构造函数的prototype属性来影响所有实例。需要注意的是,修改原型会影响所有已创建和未来创建的实例。

Person.prototype.farewell = function() {
    console.log(`${this.name} says goodbye!`);
};
person1.farewell(); // 输出: Alice says goodbye!

原型继承

通过将子类的原型设置为父类的实例,可以实现原型继承。

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.create方法

Object.create方法可以创建一个新对象,并指定其原型。

const animal = {
    makeSound: function() {
        console.log(this.sound);
    }
};

const dog = Object.create(animal);
dog.sound = 'Woof!';
dog.makeSound(); // 输出: Woof!

原型与性能

频繁修改原型可能会影响性能,尤其是在大型应用中。建议在初始化阶段完成原型的修改,避免运行时动态修改。

检查原型关系

可以使用instanceof运算符或Object.getPrototypeOf方法来检查对象的原型关系。

js原型实现

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

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

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现延迟

js实现延迟

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

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…