class语法本质是原型链的语法糖,底层仍依赖[[prototype]]链:class声明生成构造函数及prototype对象,实例方法挂载于prototype,方法调用沿[[prototype]]链查找,extends设置双重原型链,instanceof通过遍历[[prototype]]链判定。

Class 语法不是独立的继承机制,它和原型链是同一套底层逻辑的两种表达方式——代码写的是 class,内存里跑的仍是 prototype 和 [[Prototype]] 链。
class 声明 → 构造函数 + prototype 对象
每个 class 声明都会生成一个构造函数,同时自动创建一个与之绑定的 prototype 对象:
- class Person {} 等价于 function Person() {},typeof Person === 'function'
- 类中定义的实例方法(如 sayName())会自动挂载到 Person.prototype 上
- new Person() 创建的实例,其 [[Prototype]] 内部属性指向 Person.prototype
方法调用 → 沿 [[Prototype]] 链查找
当你调用 instance.sayName(),JS 引擎不会只在 instance 自身找,而是按顺序检查:
- instance 对象自身是否有 sayName 属性
- 没有则查 instance.[[Prototype]](即 Person.prototype)
- 还没找到就继续向上查 Person.prototype.[[Prototype]](即 Object.prototype)
- 直到 null 为止
extends 继承 → 双重原型链设置
class Dog extends Animal 不是“复制”或“合并”,而是精确配置两条链:
- Dog.prototype.[[Prototype]] = Animal.prototype(让 Dog 实例能用 Animal 的方法)
- Dog.[[Prototype]] = Animal(让 Dog 能继承 Animal 的静态方法,如 Animal.create())
- super() 在子类 constructor 中,本质是 Animal.call(this, ...)
instanceof 判定 → 原型链遍历
instance instanceof Class 的判断过程完全依赖 [[Prototype]]:
- 从 instance.[[Prototype]] 开始
- 逐级往上比对是否等于 Class.prototype
- 只要中途匹配上,就返回 true;走到 null 还没匹配,返回 false
- 所以 new Dog() instanceof Animal 为 true,是因为 Dog.prototype.[[Prototype]] === Animal.prototype











