news 2026/6/10 17:53:58

别再只会用 Class 了!JS 构造函数与原型才是核心

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再只会用 Class 了!JS 构造函数与原型才是核心

本文将带你从构造函数与原型这两个核心概念入手,拆解它们的设计初衷与协作逻辑,从而理解 JavaScript 独特的编程思想。

为什么需要构造函数?

在 JavaScript 中,当我们需要创建多个具有相同属性和方法的对象时,直接使用对象字面量会产生大量重复代码。
构造函数正是为了解决这个问题而生,它让对象的创建更具规范性和可维护性。

1. 构造函数的作用

  • 批量创建对象:通过一个模板快速生成多个结构相似的实例。
  • 初始化实例:在创建对象时,就为其赋予初始的属性和行为。
  • 标识类型:通过 instanceof 可以判断对象的构造函数,从而明确其 “类型”。

2. 基础示例

// 定义构造函数functionPerson(name,age){this.name=name;this.age=age;this.sayHello=function(){console.log(`你好,我是${this.name},今年${this.age}`);};}// 创建实例constp1=newPerson("张三",22);constp2=newPerson("李四",25);p1.sayHello();// 你好,我是张三,今年22岁p2.sayHello();// 你好,我是李四,今年25岁// 验证类型console.log(p1instanceofPerson);// true

冗余问题

每个实例都会单独创建一个 sayHello 方法。

这不仅浪费内存,也不符合代码复用的思想。

console.log(p1.sayHello===p2.sayHello);// false// 说明每个实例的sayHello都是一个新的函数对象

如果创建 1000 个 Person 实例,就会生成 1000 个完全相同的 sayHello 函数,这在性能和内存上都是极大的浪费。

原型(共享与复用的关键)

为了解决方法冗余的问题,JavaScript 引入了原型(Prototype)机制。
每个函数都有一个 prototype 属性,它指向一个对象,我们称之为原型对象。

原型的特性

  • 共享机制:所有通过该构造函数创建的实例,都会共享原型对象上的属性和方法。
  • 查找链:当访问实例的一个属性或方法时,如果实例本身没有,就会去原型对象上查找。
  • 动态更新:对原型对象的修改会立即反映到所有现有实例上。

优化后的代码

functionPerson(name,age){this.name=name;this.age=age;}// 将方法定义在原型上Person.prototype.sayHello=function(){console.log(`你好,我是${this.name},今年${this.age}`);};// 新增共享属性Person.prototype.species="人类";constp1=newPerson("张三",22);constp2=newPerson("李四",25);console.log(p1.sayHello===p2.sayHello);// trueconsole.log(p1.species);// 人类console.log(p2.species);// 人类

构造函数 + 原型

在 ES6 之前,JavaScript 并没有真正的 class 关键字。

它正是通过构造函数 + 原型的组合,模拟出了面向对象中 “类” 的效果。

ES6 Class 的本质

ES6 引入的 class 语法,其实只是构造函数 + 原型的语法糖。

它让代码更符合传统面向对象的写法,但底层逻辑并未改变。

// ES6 Class 写法classPerson{constructor(name,age){this.name=name;this.age=age;}// 实例方法,会被挂载到原型上sayHello(){console.log(`你好,我是${this.name},今年${this.age}`);}// 静态方法,不会被挂载到原型上staticcreate(name,age){returnnewPerson(name,age);}}// 底层依然是构造函数 + 原型console.log(typeofPerson);// functionconsole.log(Person.prototype.sayHello);// [Function: sayHello]// 使用静态方法创建实例constp3=Person.create("王五",30);p3.sayHello();// 你好,我是王五,今年30岁

原型链与继承

原型的作用不止于方法复用,它还是 JavaScript 实现继承的基础。

通过修改构造函数的原型指向另一个类型的实例,就能让该类型的实例继承另一个类型的属性和方法,这就是原型链继承。

原型链继承示例

// 父类构造函数functionAnimal(name){this.name=name;}Animal.prototype.eat=function(){console.log(`${this.name}正在吃东西`);};// 子类构造函数functionDog(name,breed){Animal.call(this,name);// 继承父类的属性this.breed=breed;}// 继承父类的方法Dog.prototype=Object.create(Animal.prototype);Dog.prototype.constructor=Dog;// 修复constructor指向// 子类的方法Dog.prototype.bark=function(){console.log(`${this.name}正在汪汪叫`);};constmyDog=newDog("旺财","中华田园犬");myDog.eat();// 旺财正在吃东西myDog.bark();// 旺财正在汪汪叫

总结

总的来说,理解构造函数与原型是打通 JavaScript 编程思想的关键一环:构造函数解决了对象批量创建与初始化的痛点,而原型则完美实现了属性与方法的共享复用,二者相辅相成,共同构成了 JavaScript 面向对象编程的核心基础。

掌握这些底层逻辑,不仅能让你写出更高效、更优雅的代码,更能为后续深入学习原型链、继承、ES6 Class 等高级概念筑牢根基。
当你再面对复杂的业务场景时,就能用更贴近语言本质的方式去设计代码,真正做到知其然,更知其所以然。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:46:35

只需3步!用科哥镜像实现高精度语音情感识别(附截图)

只需3步!用科哥镜像实现高精度语音情感识别(附截图) 语音情感识别不是科幻概念,而是已经落地的实用技术。当你在客服对话中听到AI准确判断出用户语气里的不耐烦,在教育场景中系统自动识别学生回答时的困惑情绪&#x…

作者头像 李华
网站建设 2026/6/10 9:44:59

Z-Image-Turbo本地化部署优势全解析

Z-Image-Turbo本地化部署优势全解析 Z-Image-Turbo不是又一个“参数堆砌”的文生图模型,而是一次对AI绘画工程效率的重新定义。当多数开源模型还在为30步采样、显存门槛和中英文混排崩溃而挣扎时,它用8步生成、16GB显存兼容、开箱即用的WebUI&#xff0…

作者头像 李华
网站建设 2026/6/10 7:56:35

[Linux]学习笔记系列 -- [drivers][bus]simple-pm-bus

title: simple-pm-bus categories: linuxdriversbus tags:linuxdriversbus abbrlink: b441a160 date: 2025-10-16 15:36:50 https://github.com/wdfk-prog/linux-study 文章目录drivers/bus/simple-pm-bus.c 简单电源管理总线(Simple PM Bus) 通用的、轻量级的设备电源管理协调…

作者头像 李华
网站建设 2026/6/10 9:43:46

动手实测YOLOv13:三行代码实现高精度目标识别

动手实测YOLOv13:三行代码实现高精度目标识别 在智慧物流分拣中心的高速传送带上,每分钟经过200件包裹,传统检测系统面对叠放、反光、遮挡等复杂工况频频漏检;而在城市交通监控大屏前,暴雨夜中模糊的车牌与低光照下的…

作者头像 李华
网站建设 2026/6/10 9:49:13

智能家居中i2s音频接口设计:完整指南

以下是对您提供的博文《智能家居中I2S音频接口设计:完整技术分析指南》的 深度润色与专业重构版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、有“人味”——像一位十年嵌入式音频系统工程师在技术分享会上娓娓道来&a…

作者头像 李华
网站建设 2026/6/9 17:51:22

电商推荐系统实战:用PyTorch-2.x-Universal-Dev-v1.0快速实现模型训练

电商推荐系统实战:用PyTorch-2.x-Universal-Dev-v1.0快速实现模型训练 1. 为什么电商推荐系统值得你花10分钟上手 你有没有想过,当用户在电商平台上浏览商品时,那些精准出现在首页的“猜你喜欢”、购物车页面的“买了又买”、结算页的“搭配…

作者头像 李华