JavaScript中class的constructor支持形参默认值,语法为name="默认名",传undefined或不传时生效,支持任意类型且每次实例化重新求值,适用于可选配置等场景。

JavaScript 中 class 的 constructor 可以直接用等号为参数设默认值,写法和普通函数一样,既简洁又实用。
参数默认值的写法与效果
在 constructor 形参列表中,用 name = "默认名" 这样的语法即可设置默认值。当 new 实例时没传该参数,或传了 undefined,就会自动启用默认值。
- 支持任意类型:字符串、数字、布尔、
null、对象字面量、甚至函数调用(如date = new Date()) - 参数之间互不影响,可只给部分参数设默认值,比如
constructor(name, age = 18, city) - 默认值表达式在每次实例化时重新求值,不是定义时缓存 —— 所以
time = Date.now()每次都不同
常见使用场景
默认值特别适合处理“可选配置”或“兜底行为”:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 创建用户时姓名可省略:
constructor(name = "游客", email = "") - 初始化带状态的对象:
constructor(isActive = true, retries = 3) - 配合解构传参更灵活:
constructor({ name = "匿名", level = 1 } = {}),这样调用new User()或new User({ level: 5 })都能正常工作
继承中注意 super 的传参顺序
子类 constructor 设了默认值,调用 super() 时仍需按父类要求传参。但你可以利用默认值简化传递:
立即学习“Java免费学习笔记(深入)”;
- 父类
class Animal { constructor(name, habitat = "forest") { ... } } - 子类可写
constructor(name, habitat, diet) { super(name, habitat); this.diet = diet || "omnivore"; } - 调用
new Dog("旺财")时,habitat会取父类默认值,diet取子类逻辑默认值
不写 constructor 也能有默认行为
如果整个类不需要自定义初始化逻辑,可以完全省略 constructor。JS 会提供一个空的默认构造函数,此时 new 实例不会报错,只是没有初始属性。
- 想让实例自带默认属性?那就得显式写 constructor 并赋值,或者用类字段(
name = "未知")语法(ES2022+) - 类字段和 constructor 默认值是两套机制:前者是声明式初始化,后者是函数式参数控制,建议优先用 constructor 默认值,兼容性更好

















