当前位置:首页 > JavaScript

js实现原型

2026-04-06 03:37:20JavaScript

原型的基本概念

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

创建原型的方法

使用构造函数和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

使用Object.create()
Object.create()可以直接指定新对象的原型。

const personProto = {
    greet() {
        console.log(`Hello, my name is ${this.name}`);
    }
};

const person2 = Object.create(personProto);
person2.name = "Bob";
person2.greet(); // 输出: Hello, my name is Bob

修改原型链

动态修改原型
可以通过__proto__Object.setPrototypeOf()动态修改对象的原型(不推荐在生产环境中使用__proto__)。

const animal = {
    sound: "Generic sound",
    makeSound() {
        console.log(this.sound);
    }
};

const dog = {
    sound: "Bark"
};

Object.setPrototypeOf(dog, animal);
dog.makeSound(); // 输出: Bark

原型链的继承

实现继承
通过组合构造函数和原型链实现继承。

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

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

function Dog(name) {
    Animal.call(this, name); // 调用父类构造函数
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

const dog1 = new Dog("Rex");
dog1.speak(); // 输出: Rex makes a noise.

检查原型关系

使用instanceof和isPrototypeOf
instanceof检查对象是否在原型链上,isPrototypeOf检查某个对象是否是另一个对象的原型。

console.log(dog1 instanceof Dog); // true
console.log(Dog.prototype.isPrototypeOf(dog1)); // true

现代语法:Class语法糖

ES6的class语法简化了原型操作,但底层仍基于原型链。

js实现原型

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 dog2 = new Dog("Max");
dog2.speak(); // 输出: Max barks.

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

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…