JavaScript中类属性与原型属性的覆盖规则详解

实例属性优先于原型属性访问,类字段声明本质是实例属性,static属性属于类本身而非原型链。在 JavaScript 中,类属性(即直接定义在类体内的 实例属性)和原型属性(即定义在类的 prototype 上的方法或通过 static 定义的静态成员)遵循明确的属性访问与覆盖逻辑。理解它们的优先级、作用域和赋值行为,是避免"方法不生效""属性看似被修改却没变"等常见问题的关键。实例属性优先于原型属性访问当通过实例访问一个属性或方法时,JavaScript 引擎会按以下顺序查找:先检查实例自身是否拥有该属性(即在 this 上直接定义,如类字段初始化 value = 123 或构造函数中 this.value = ...) 若不存在,则沿 proto 链向上查找,在 Constructor.prototype 上找(例如类中定义的 method() {}) 再往上是 Object.prototype,最后到 null这意味着:即使原型上已有同名方法,只要你在实例上直接赋值(obj.name = 'xxx'),后续访问 obj.name 就永远取实例值,不再查原型------这是"覆盖"的实质:不是删除原型属性,而是遮蔽(shadowing)。类字段声明(public field)本质是实例属性ES2022 起支持的类字段语法(如 count = 0)会在每次构造函数执行时,为每个实例创建独立副本:立即学习"Java免费学习笔记(深入)";class Counter { count = 0; // ? 每个实例都有自己的 count inc() { this.count++; }}const a = new Counter();const b = new Counter();a.inc(); console.log(a.count); // 1console.log(b.count); // 0 ------ 互不影响这类属性不会出现在原型上,Counter.prototype.hasOwnProperty('count') 返回 false。它和在构造函数中写 this.count = 0 效果一致,只是更简洁。 唱鸭 音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

相关推荐
如竟没有火炬3 小时前
接雨水22
数据结构·python·算法·leetcode·散列表
消晨消晨3 小时前
Pytorch初上手——Dataset自定义数据集与Dataloader数据加载器
人工智能·pytorch·python
小白学大数据3 小时前
均线选股策略研究:基于 Python 数据分析实现
人工智能·python·数据分析
jiayong233 小时前
Tool Permission 与 Sandbox 的安全流水线:Agent 工具系统的工程边界
java·数据库·安全·agent
C137的本贾尼3 小时前
从零认识 Spring AI:Java 开发者的 AI 第一课
python·langchain
源码之家3 小时前
计算机毕业设计:Pyhon健康数据分析系统 Django框架 数据分析 可视化 身体数据分析 大数据(建议收藏)✅
大数据·python·数据挖掘·数据分析·django·lstm·课程设计
weixin_444012934 小时前
如何在MongoDB中实现按时间跨度的分片路由_时间序列范围分片与冷热节点架构
jvm·数据库·python
六月雨滴4 小时前
块(Block)管理
数据库·oracle·dba
无敌昊哥战神4 小时前
大模型(LLM)推理优化技术全景总结
python·算法·大模型
东风破1374 小时前
DM存储过程及系统 表,系统视图,以及常规的运维SQL语句
运维·数据库·dm达梦数据库