super在对象字面量和class中行为不同:前者指向当前对象原型,仅限方法内使用且需显式设置原型;后者按上下文动态绑定父类或其原型,constructor中必须调用super(),且具语法强制性。
super 在对象字面量和 class 中都能用,但行为逻辑完全不同——核心区别在于:对象字面量里的 super 指向的是当前对象的原型,而 class 中的 super 会根据上下文(构造函数、普通方法、静态方法)动态绑定到父类或父类原型,且受严格语法约束。
在对象字面量中使用 super,必须满足两个前提:该对象已通过 Object.setPrototypeOf() 显式设置了原型;且 super 只能在方法定义中出现(不能在属性初始化或顶层作用域使用)。
console.log(super),会报错——它不是一个可求值的对象,而是语法层面的引用机制class 继承体系下,super 的用法更严格、更丰富,必须区分“作为函数”和“作为对象”两种角色。
super(),否则无法访问 this;此时 super 是函数,代表父类构造函数prototype,即 Object.getPrototypeOf(子类.prototype);调用 super.xxx() 时,this 仍指向当前子类实例最易忽略的一点是:对象字面量中的 super 不涉及继承链初始化,它只是运行时原型查找;而 class 中的 super 在 constructor 里承担了初始化父类状态的职责,是继承机制的强制环节。
立即学习“Java免费学习笔记(深入)”;
ReferenceError