You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子类化Object与自定义包装函数时super()的行为解析

子类化Object时super(v)的底层逻辑

这是ES6类继承内置构造函数的特殊规则导致的:

  • 直接调用new Object(1)时,Object构造函数会识别原始值参数,返回对应的Number包装实例。但当它作为ES6类的基类被super()调用时,规则发生了变化:ES6类要求子类实例必须属于子类自身,因此调用super(v)时会强制创建一个属于子类C的普通Object实例,完全跳过Object对原始值的包装逻辑。最终new C(1)是个普通对象,和Number无继承关系,所以instanceof Number返回false。

自定义包装函数的差异

MyObject是普通函数,它的逻辑就是显式返回new Object(v)的结果。当class D继承它时:

  • 调用super(v)等价于执行MyObject(v),这个函数返回的是Number实例。
  • 根据ES6类规则,如果父类构造函数返回一个对象,子类实例会直接复用这个对象,而不是生成新的子类实例。所以new D(1)本质就是那个Number实例,因此instanceof Number返回true。

核心差异总结

  • 子类化内置Object:super()受ES6类内置约束,生成子类自身的普通对象,忽略Object的包装逻辑。
  • 继承自定义包装函数:super()只是执行普通函数,复用其返回的对象,完全遵循函数自身的返回逻辑。

内容的提问来源于stack exchange,提问作者jimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:27:14