ES6的class是函数语法糖,未改变原型链机制;class声明本质是函数,实例__proto__指向类prototype,类prototype.constructor指回自身,extends自动设置三条原型链,方法挂prototype、实例属性挂this、静态方法挂类本身。

ES6 的 class 没有引入新对象模型,它完全建立在 JavaScript 原有的原型链机制之上——只是把过去需要手动拼装的原型关系,用更简洁、更可控的语法封装起来了。
类声明本质是函数,不是新类型
你写的 class Person { },运行时等价于一个具名函数表达式,并自动绑定到 Person.prototype.constructor。可以通过 typeof Person 验证,结果始终是 "function"。它不会变量提升,也不能直接调用(必须用 new),因为底层加了 _classCallCheck 检查,确保只作为构造器使用。
实例、原型、类三者的链接关系明确
- 每个实例对象的
__proto__指向其类的prototype对象 - 类的
prototype对象的constructor指回该类本身 - 类本身(即函数)的
__proto__指向Function.prototype,符合所有函数的共性
继承(extends)只是自动设置三条原型链
当你写 class Child extends Parent,引擎会自动完成:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。
-
Child.__proto__ === Parent:子类可继承父类的静态方法 -
Child.prototype.__proto__ === Parent.prototype:子类实例可访问父类原型上的方法 - 强制子类构造函数中调用
super(),否则this处于未初始化状态,访问即报错
方法与属性的挂载位置有区别
类体内定义的普通方法(如 speak() { })自动添加到 prototype 上,供所有实例共享;而用赋值形式写的实例字段(如 say = () => {} 或 field = 1)则直接绑定到 this,属于实例自身。静态方法(static method())则直接挂在类函数本身上,不进入原型链。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










