js原型系统核心是三条主线:谁指向谁、为什么这么指、怎么验证;围绕构造函数、实例对象、prototype构成三角关系,延伸出函数双重身份、原型链追溯及可运行验证节点。

画JS原型对象的思维导图,关键不是堆砌概念,而是理清三条主线:谁指向谁、为什么这么指、怎么验证。下面分四个实用模块来组织内容,每块都对应可运行代码和常见误区,适合边画边验证。
一、核心三角关系(必须放在中心)
这是整个原型系统的起点,用三个节点构成闭环三角:
-
构造函数(如
function Person(){})→ 指向 → Person.prototype(通过Person.prototype属性) -
实例对象(如
const p = new Person())→ 指向 → Person.prototype(通过p.__proto__) -
Person.prototype → 指向 → 构造函数(通过
Person.prototype.constructor === Person)
注意:__proto__ 是实例身上的隐式原型,prototype 是函数身上的显式原型,二者不能混用;constructor 不是只读属性,可被改写,所以不能单靠它判断类型。
二、函数与对象的双重身份(上侧分支)
所有函数既是“函数”又是“对象”,因此有两套原型链:
- 作为函数:它的隐式原型是
Function.prototype(即Person.__proto__ === Function.prototype) - 作为对象:它的显式原型是
Person.prototype(仅对函数有效) - 而
Function.prototype自身是个普通对象,它的__proto__指向Object.prototype
这个分支解释了为什么函数能调用 .call()、.bind() —— 它们定义在 Function.prototype 上。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
三、原型链向上追溯(中间与右侧主干)
从任意实例出发,沿 __proto__ 向上找,路径固定:
-
p.__proto__→Person.prototype -
Person.prototype.__proto__→Object.prototype -
Object.prototype.__proto__→null(终点)
所有普通对象(包括数组、日期等)最终都连到 Object.prototype;但 Function 构造函数本身也遵循这条链:Function.__proto__ === Function.prototype,而 Function.prototype.__proto__ === Object.prototype。
四、验证型节点(建议标为绿色/高亮)
每个箭头旁标注一句可直接运行的验证代码,避免“看懂图不会写”:
-
Person.prototype.isPrototypeOf(p)→ 返回true -
p instanceof Person→ 返回true(本质就是查原型链) -
Object.getPrototypeOf(p) === Person.prototype→ 推荐替代__proto__的标准方法 -
Person.prototype.hasOwnProperty('name')→ 判断属性是否在原型上(非继承)
不推荐把 __proto__ 写进生产代码,但它是理解原型链不可绕过的入口;真正写代码时优先用 Object.getPrototypeOf() 和 Object.setPrototypeOf()。










