当前位置:首页 > JavaScript

js原型实现

2026-02-01 17:44:06JavaScript

理解原型的基本概念

在JavaScript中,每个对象都有一个原型(prototype),原型本身也是一个对象。对象从原型继承属性和方法。原型链是JavaScript实现继承的机制。

使用构造函数创建对象

构造函数用于创建对象实例。通过new关键字调用构造函数时,会创建一个新对象,并将该对象的原型指向构造函数的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

原型链继承

通过原型链,子构造函数可以继承父构造函数的属性和方法。子构造函数的prototype指向父构造函数的实例。

js原型实现

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 = {
    speak() {
        console.log(`${this.name} makes a noise.`);
    }
};

const dog = Object.create(animal);
dog.name = 'Rex';
dog.speak(); // 输出: Rex makes a noise.

修改原型

原型可以在运行时动态修改,所有实例都会受到影响。

js原型实现

function Car(model) {
    this.model = model;
}

const car1 = new Car('Tesla');
Car.prototype.drive = function() {
    console.log(`${this.model} is driving.`);
};

car1.drive(); // 输出: Tesla is driving.

检查原型关系

使用instanceofObject.getPrototypeOf可以检查对象的原型关系。

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

避免直接修改__proto__

虽然__proto__属性可以访问对象的原型,但直接修改它不推荐使用。应使用Object.createObject.setPrototypeOf

const cat = {
    purr() {
        console.log('Purring...');
    }
};

const kitten = Object.create(cat);
kitten.purr(); // 输出: Purring...

使用ES6的class语法

ES6的class语法是原型的语法糖,简化了原型继承的写法。

class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name} makes a noise.`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name} barks.`);
    }
}

const d = new Dog('Rex');
d.speak(); // 输出: Rex barks.

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

相关文章

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现求导

js实现求导

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