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

[[Prototype]]旁的名称含义及继承显示父构造函数名的原因

理解[[Prototype]]属性旁的名称含义

[[Prototype]]旁边显示的名称,本质是该原型对象的constructor属性指向的构造函数的name值,不是固定的“类名”,这也是你困惑的核心原因,具体拆解:

  • 常规场景下,普通对象的[[Prototype]]显示为Object,是因为Object.prototype.constructor指向Object,取它的name属性值"Object",这符合你最初的认知。
  • 但如果修改了原型对象的constructor,这个名称会直接变化:
    // 自定义构造函数
    function Person() {}
    let p = new Person();
    // p的[[Prototype]]显示为Person —— 因为Person.prototype.constructor === Person
    
    // 替换原型对象,且未显式设置constructor
    Person.prototype = {
      sayHi: () => console.log('hi')
    };
    let p2 = new Person();
    // 此时p2的[[Prototype]]显示为Object —— 因为新原型对象的constructor默认指向Object
    
  • 用Object.create()创建的对象也同理:
    // 基于Array.prototype创建对象
    let arrLike = Object.create(Array.prototype);
    // arrLike的[[Prototype]]显示为Array —— 因为Array.prototype.constructor是Array
    
  • 极端情况:如果原型对象的constructor指向匿名函数,或者被设为非函数值,浏览器调试工具会显示anonymous或者 fallback 到Object(取决于工具实现)。

总结:这个名称是动态的,完全由当前原型对象的constructor属性决定,不是对象的“固有类名”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:15:26