You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript原型继承疑问:原型对象替换后实例属性差异解析

关于JavaScript原型替换后实例属性访问的疑问解答

嘿,我来帮你把这个原型相关的疑惑掰扯清楚~ 核心点其实在于实例和原型的关联是在创建实例的那一刻就固定下来的,咱们一步步拆解你的代码:

  • 第一步:function Cat() { } 定义构造函数后,Cat.prototype 默认指向一个包含 constructor 属性的原型对象。
  • 第二步:Cat.prototype.age = 10; 给这个默认原型对象添加了 age 属性,值为10。
  • 第三步:var cat1 = new Cat(); 创建 cat1 时,JavaScript 会把 cat1 的内部原型(__proto__)指向当前Cat.prototype 所引用的那个对象(也就是带 age:10 的那个),所以此时 cat1.age 是10。
  • 第四步:Cat.prototype = { age: 15 }; 这里注意——你不是在修改原来的原型对象,而是直接替换了Cat.prototype 的引用!现在它指向一个全新的、只包含 age:15 的对象,和之前的原型对象完全是两个独立的内存地址。
  • 第五步:var cat2 = new Cat(); 创建 cat2 时,它的内部原型会指向这个新的原型对象,所以 cat2.age 是15。
  • 最后:display(cat1.age) 显示10,因为 cat1 的内部原型自创建以来就没变过,始终指向最初那个带 age:10 的原型对象,构造函数后续替换 prototype 的操作不会影响已经存在的实例的原型链。

简单总结:实例的原型链关联是一次性绑定在创建时刻的,构造函数的 prototype 后续的指向变更,只会影响之后新创建的实例,对已经存在的实例毫无影响。

内容的提问来源于stack exchange,提问作者Dimitar Tsonev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:41:07