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

JavaScript 中,原型链的**最顶端(终极原型)只有一个——`Object.prototype`

在 JavaScript 中,原型链的最顶端(终极原型)只有一个——Object.prototype,但你可能会疑惑“两个”,核心是混淆了「原型链终点」和「特殊的 null」,或者误将 Function.prototype 当作顶端(实际它也是 Object.prototype 的后代)。

先明确核心结论:原型链的终极顶端是 Object.prototype,而 Object.prototype.__proto__null(原型链的终止标志),这两者共同构成了“顶端的两个关键节点”,但本质角色不同(一个是终极原型,一个是终止符)。

1. 真正的终极原型:Object.prototype

所有对象(包括普通对象、数组、函数、日期等)的原型链,最终都会指向 Object.prototype。它是所有对象的“祖先原型”,提供了 JavaScript 中最基础的对象方法,比如:

  • toString():将对象转为字符串
  • valueOf():获取对象的原始值
  • hasOwnProperty():判断属性是否是对象自身的(非继承)
  • isPrototypeOf():判断是否是另一个对象的原型

示例验证:任何对象的原型链终点都是它

const obj = {};
console.log(obj.__proto__ === Object.prototype); // true(普通对象直接指向)
console.log(obj.__proto__.__proto__); // null(原型链终止)const arr = [];
console.log(arr.__proto__ === Array.prototype); // true(数组的直接原型)
console.log(arr.__proto__.__proto__ === Object.prototype); // true(数组的原型链向上指向)
console.log(arr.__proto__.__proto__.__proto__); // null

2. 原型链的终止标志:null

Object.prototype 是原型链的“最后一个原型对象”,但它的 __proto__(原型指针)被设计为 null,目的是终止原型链查找——当访问一个对象的属性时,JS 会顺着原型链向上找,直到找到 null 还没找到,就返回 undefined

null 不是一个对象,也没有任何属性/方法,它的角色是“链的尽头”,而非“原型对象”。

为什么会误以为“有两个顶端”?

可能是混淆了 Function.prototypeObject.prototype——Function.prototype 是所有函数的直接原型,但它依然是 Object.prototype 的后代,并不是顶端:

function fn() {}
console.log(fn.__proto__ === Function.prototype); // true(函数的直接原型)
console.log(Function.prototype.__proto__ === Object.prototype); // true(函数原型向上指向终极原型)
console.log(Function.prototype.__proto__.__proto__); // null

甚至 Object 本身是一个构造函数(属于函数),它的原型也指向 Function.prototype,最终还是绕回 Object.prototype

console.log(Object.__proto__ === Function.prototype); // true
console.log(Function.prototype.__proto__ === Object.prototype); // true

总结(原型链顶端的“两个关键节点”)

节点角色是否是原型对象
Object.prototype原型链的终极原型(所有对象的祖先)是(提供基础方法)
null原型链的终止标志(链的尽头)否(无属性/方法)

简单说:原型链的“顶端原型”只有 Object.prototypenull 是链的终止符,两者共同构成了原型链的终点逻辑

http://www.dtcms.com/a/615342.html

相关文章:

  • 建筑招聘网站哪个好做钢材生意选什么网站
  • 防城港做网站用服务器做网站空间
  • 2025大学生数学竞赛1-2(非数学类)
  • 做类似淘宝的网站要多少钱凡科网站怎么做链接头像logo
  • 做个自己的网站需要多少钱wordpress登录400错误
  • 计算机理论学习Day20(加更)
  • 民治做网站做团购网站需要多少钱
  • arm架构上搭建第一个区块链网络FISCO BCOS
  • MM32F0144芯片ADC电压采样策略详解
  • 自己做的网站怎么取sql数据库一站式网站搭建
  • 网页C语言在线编译 | 提供方便快捷的C语言编程环境
  • 网站如何屏蔽中国ip网页开发工具软件
  • VMware-ubuntu网络配置
  • 东风地区网站建设价格国家免费培训学校
  • 【C语言】贪吃蛇游戏设计思路深度解析:从零开始理解每个模块
  • 《Three.js权威指南》核心知识点梳理
  • 青岛网架公司网站域名如何优化
  • 网站建设陆金手指谷哥4广告公司简介模板200字
  • 大发快三网站自做英文网站的首页怎么做
  • 免费网站部署杭州制作网站个人
  • rootfs overlay 灵活自定义
  • 如何把网站做成软件商务网站开发流程
  • 设备驱动程序编程-Linux2.6.10-kdb安装
  • 怎么看别的网站是那个公司做的服装设计最好的出路
  • 免费网站站盐城建设厅网站设计备案
  • 卡尔曼学习笔记
  • seo导航站php网站费用
  • 建设网站收废品做网站找那些公司
  • 信阳企业网站建设公司网上做衣服的网站有哪些
  • 一个服务器可以做两个网站郎溪做网站