JavaScript中constructor→prototype无限链是引用访问还是内存存储?
JavaScript 原型链访问机制说明
你调试时观察到的「constructor→prototype 链无限延伸」本质是 JS 原型系统内置的引用闭环,并不是真的存在无限层级的独立对象:
- 每个构造函数(比如你定义的
Person)默认自带prototype属性,指向该构造函数对应的原型对象 - 这个原型对象默认又自带
constructor属性,直接指回关联的构造函数本身
调试工具里看到的不断延伸的结构,只是工具反复解析这两个互相指向的引用生成的可视化效果,本质上只有Person函数和Person.prototype两个独立对象,没有无限生成新对象。
核心问题解答
JavaScript 访问原型链时完全通过引用沿链遍历,不会把整条链的内容预先存储在内存中:
- 当你访问一个对象(比如示例里的
person1)的属性时,JS 引擎首先会在对象自身的属性列表里查找,找不到就顺着对象的隐式原型__proto__引用,指向它的构造函数的prototype对象(也就是Person.prototype)继续查找 - 如果还是没找到,就继续向上遍历
Person.prototype.__proto__(也就是Object.prototype),直到访问到Object.prototype.__proto__(值为null)就终止查找 - 你看到的
constructor和prototype来回跳转的闭环,只是两个固定的引用指向,不会占用额外内存存储重复的层级结构,调试工具展开时也是实时读取引用指向的对象内容,不存在提前存储无限长链的情况。
示例代码
function Person(first, last, age, gender, interests) { this.name = { 'first': first, 'last' : last }; this.age = age; this.gender = gender; } const person1 = new Person("foo", "bar", 24, "Male")
内容的提问来源于stack exchange,提问作者ADITYA HAZARIKA
相关产品推荐
相关产品推荐

