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

如何理解JavaScript中用extends扩展普通函数及对应示例代码?

在JavaScript中用extends扩展普通函数的方法

JavaScript里的extends关键字不仅能用来扩展类,还可以扩展普通的构造函数——只要这个函数能作为构造器被new调用(或者本身能返回一个对象)。核心规则有两个:

  • 子类的constructor必须调用super(),否则会直接报错;
  • super()会直接调用父级的普通函数,若父函数显式返回了一个对象,子类实例会被这个返回的对象覆盖。
代码执行逻辑拆解

先把目标代码贴出来:

function MyObject(v) {
  return new Object(v);
}
class D extends MyObject {
  constructor(v) {
    super(v);
  }
}
console.log(new D(1) instanceof Number); // true

一步步拆解执行逻辑:

  1. MyObject函数的特殊行为:它接收参数v后,直接返回new Object(v)。这里要注意Object构造函数的特殊逻辑:当传入数字、字符串这类原始值时,它会返回对应原始类型的包装对象——比如new Object(1)等价于new Number(1),是一个Number类型的实例。
  2. 子类D的继承逻辑:class D extends MyObject表示D继承自MyObject这个普通函数。D的构造函数里调用super(v),这一步相当于直接执行MyObject(v),并且会把MyObject的返回值作为子类实例的最终结果。
  3. new D(1)的执行流程:
    • 用new调用D时,触发D的构造函数;
    • 构造函数调用super(1),执行MyObject(1),得到new Object(1)(也就是Number包装对象);
    • 因为MyObject显式返回了一个对象,这个对象会直接替代原本默认创建的D实例,成为new D(1)的结果;
  4. instanceof判断的结果:既然new D(1)最终得到的是Number包装对象,那么instanceof Number自然返回true。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:22:03