JS的构造函数、原型对象、class本质是原型链的三种表达:底层为原型链,中层为构造函数模式,上层为class语法糖;三者通过__proto__与prototype指向关系构成闭环,继承依赖prototype.__proto__指向父类prototype。

直接从运行时行为入手,比死记语法更牢靠。JS 的构造函数、原型对象、class 和继承,本质上是一套东西的三种表达:底层是原型链,中层是构造函数模式,上层是 class 语法糖。学的时候别割裂开,要来回对照着看。
先理清三者关系:构造函数、实例、prototype
这是所有面向对象机制的起点:
- 每个函数(包括构造函数)自带 prototype 属性,它是一个对象,用来存放所有实例共享的方法和属性
- 每个实例(如
const p = new Person())内部有 __proto__,它自动指向其构造函数的prototype -
Person.prototype.constructor又指回Person函数本身,构成闭环 - 访问一个属性或方法时,JS 先查实例自身,再顺着
__proto__一层层往上找,直到Object.prototype,最后到null—— 这就是原型链
再看 class:不是新机制,是封装好的写法
class 不是 JS 新加的“类系统”,它只是把构造函数 + prototype 操作打包成更直观的语法:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
-
constructor()对应原来的构造函数体 - 类中定义的普通方法(如
sayHi())自动挂到ClassName.prototype上 -
static方法挂到类本身,不进原型链 - 你可以随时用
MyClass.prototype.xxx = ...手动扩展,class 并未封锁原型
继承必须搞懂 super 和原型链怎么联动
用 extends 写继承,背后仍是原型链连接,但多了两个硬性规则:
- 子类构造函数里,必须先调用
super(),否则不能用this—— 因为super()实际做了两件事:创建父类实例、把它的__proto__连到父类prototype -
super.method()不是语法糖,它等价于在当前对象的原型链上查找并调用那个方法,本质是Object.getPrototypeOf(this).method.call(this) - 子类的
prototype.__proto__指向父类的prototype,这才是继承能生效的底层依据
动手验证比背概念管用
每学完一个点,立刻写几行代码验证:
- 打印
new User().__proto__ === User.prototype看是否为true - 在
User.prototype上动态加个方法,再调用新旧实例看看是否都生效 - 写一个
class A extends B,然后检查A.prototype.__proto__ === B.prototype - 删掉子类构造函数里的
super(),看报什么错,再理解为什么
不复杂但容易忽略:class 是语法糖,但糖衣底下全是原型链。只要抓住“谁的 __proto__ 指向谁的 prototype”这一条线,构造函数、class、继承就全串起来了。

















