当前位置: 首页 > news >正文

「类 vs 实例」对比 ,「类 - 原型 - 实例」的关系

坚持的本身就是意义

目录

  • 直观类比
  • 类 (Class) vs 实例 (Instance)
    • 对比表
    • 示例代码
  • 类 - 原型 - 实例关系图
  • 解释:
    • 类 (class Person)
    • 原型 (Person.prototype)
    • 实例 (new Person(...))
  • 总结:

直观类比

  • 类(Class) = 图纸 / 模板
  • 实例(Instance) = 根据图纸造出来的房子 / 产品

类 (Class) vs 实例 (Instance)

对比表

对比点类 (Class)实例 (Instance)
定义方式使用 class 关键字定义使用 new 类名(...) 创建
打印结果打印出来的是 类的结构/定义打印出来的是 对象(属性 + 值)
内存位置存在于函数(构造器)区域存在于堆内存,每次 new 都是新的对象
属性类本身没有具体属性值,只定义结构实例对象上有具体的属性和值
方法方法定义在类的 prototype实例可以直接调用这些方法
用途相当于一个“模板”相当于由模板生产出来的“成品”
例子代码console.log(Person)
👉 输出:class Person { constructor(...) {...} speak() {...} }
console.log(p1)
👉 输出:Person { name: '张三', age: 22 }

示例代码

class Person {name: stringage: numberconstructor(name: string, age: number) {this.name = namethis.age = age}speak() {console.log(`我叫${this.name},今年${this.age}`)}
}console.log(Person) // 类的定义const p1 = new Person("张三", 22)
console.log(p1)     // 实例对象 Person { name: '张三', age: 22 } 
p1.speak()          // 调用实例方法 我叫张三,今年22岁

类 - 原型 - 实例关系图

   ┌─────────────────────────┐│        class Person     ││ ─────────────────────── ││ constructor(name, age)  ││ speak() { ... }         │  ← 方法挂到 prototype 上└─────────────┬───────────┘│▼┌─────────────────┐│ Person.prototype│   ← 原型对象│ ─────────────── ││ speak() { ... } │   ← 共享方法│ constructor: f  │└───────▲─────────┘│ [[Prototype]]┌────────────┴────────────┐│                         │
┌──┴───────────┐      ┌──────┴───────────┐
│   p1 实例     │      │    p2 实例       │
│ ───────────  │      │ ───────────      │
│ name: '张三'  │      │ name: '李四'     │
│ age: 22      │      │ age: 18          │
└──────────────┘      └──────────────────┘

解释:

类 (class Person)

  • 定义了构造函数和方法。
  • 方法其实会自动挂载到 Person.prototype 上。

原型 (Person.prototype)

  • 所有实例共享的方法都存在这里。例如 speak() 方法,只存一份,所有实例都能通过原型链访问。

实例 (new Person(…))

  • 每次 new 都会创建一个新的对象(放在堆内存里),对象上存储 独有的数据属性(name, age)。
  • 调用 p1.speak() 时,JS 引擎会:
    • 先找 p1 本身有没有 speak
    • 找不到 → 顺着 proto(即原型链)去 Person.prototype 找
    • 找到后执行
class Person {constructor(name, age) {this.name = namethis.age = age}speak() {console.log(`我叫${this.name},今年${this.age}`)}
}const p1 = new Person("张三", 22)console.log(p1) // Person { name: '张三', age: 22 }
console.log(Person.prototype) // { speak: f, constructor: f }
console.log(p1.__proto__ === Person.prototype) // true

总结:

  • 类 (Class) 是模板,方法都放在 prototype 上。
  • 实例 (Instance) 存放自己的数据属性。
  • 实例通过 proto 链接到 Person.prototype,形成原型链来共享方法。

文章转载自:

http://X7bATLYm.pwLxy.cn
http://gwOucbRJ.pwLxy.cn
http://Eq8aVwFF.pwLxy.cn
http://1Uz48vg5.pwLxy.cn
http://w6itrZLu.pwLxy.cn
http://H8IFEr7T.pwLxy.cn
http://SfAmGV3b.pwLxy.cn
http://riBmQHzE.pwLxy.cn
http://pXpgc7xv.pwLxy.cn
http://KgWv60sL.pwLxy.cn
http://oeJB3Xut.pwLxy.cn
http://T8dIvpxy.pwLxy.cn
http://46VA93qx.pwLxy.cn
http://VzhxwnO9.pwLxy.cn
http://QrqNfkza.pwLxy.cn
http://dALdZLDQ.pwLxy.cn
http://LKambxUu.pwLxy.cn
http://y06gC7ZF.pwLxy.cn
http://Zy8eq3Ep.pwLxy.cn
http://Cu0pUufN.pwLxy.cn
http://LfqbGz25.pwLxy.cn
http://Y2GhUPpp.pwLxy.cn
http://7pHJQihM.pwLxy.cn
http://5QnZE6d6.pwLxy.cn
http://3UoxAQaz.pwLxy.cn
http://AGaoY7bB.pwLxy.cn
http://4IKjP6no.pwLxy.cn
http://PrV9GUV5.pwLxy.cn
http://wUfOaLLD.pwLxy.cn
http://lEAtzHOj.pwLxy.cn
http://www.dtcms.com/a/375459.html

相关文章:

  • sft冷启动时数据集构造需要注意哪些因素?为什么要做数据清洗与均衡采样?
  • OpenCV 模板匹配代码深度解析与应用场景全景分析
  • 2026年ESWA SCI1区TOP,适应性社会流动性重构差分进化算法ASMRDE,深度解析+性能实测
  • 中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开启ADB ROOT安卓固件-方法3
  • 大模型食材识别技术革新:AI重构精准营养管理
  • 4.6 变体
  • 智能充气泵PCBA方案
  • minio大文件断点续传
  • C语言(嵌入式方向)
  • 【大模型手撕】pytorch实现LayerNorm, RMSNorm
  • 执行计划 RAC 笔记
  • 西嘎嘎学习 - C++ 类 对象 - Day 8
  • 如何把PPT转换成PDF?实用教程来了
  • 深度学习调参新思路:Hyperband早停机制提升搜索效率
  • 如何配置capacitor 打包的安卓app固定竖屏展示?
  • Redis中的Zset数据类型
  • 在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记
  • 测试报告:“问卷考试系统”项目
  • WOA+LSTM+itransformer时间序列预测模型
  • Nginx运维之路(Docker多段构建新版本并增加第三方模块)
  • 构造方法与代替代码构造方法的注解
  • 开源模型应用落地-基于KTO的Qwen3-4B意图理解精准对齐实践(二十一)
  • 微信小程序加速计开发指南
  • Python中ORM的理解
  • Spark Streaming 实时流处理入门
  • 单片机学习笔记.C51存储器类型含义及用法
  • PgSQL中pg_stat_user_tables 和 pg_stat_user_objects参数详解
  • Matlab机器人工具箱7 搬运动画展示
  • 概率论第五讲—大数定律与中心极限定理
  • 计算机视觉--opencv---如何识别不同方向图片的识别