class语法糖本身不赋予方法默认行为,真正起作用的是语言规则:es6中方法默认为public实例方法(挂载原型),无隐式访问控制;constructor若未声明则自动插入空函数,显式声明时须手动初始化this;static、async等特性必须显式声明,super()在子类constructor中为强制调用而非默认。

Class 语法糖本身不给方法赋予“默认行为”,它只是让构造函数和原型方法的写法更清晰。真正起作用的是语言自身的规则——比如访问权限、是否静态、能否重写,这些都不是 class 语法自动加的,而是由你显式写的修饰符决定的。
方法没有隐式访问修饰符
在 ES6 class 中,所有方法默认是 public 实例方法,但这个“public”不是关键字,也不可省略声明;它只是 JavaScript 的运行时行为:只要没加 static,方法就挂载在原型上,能被实例调用。不像 Java 或 C# 那样有 package-private 或 private 的默认访问控制——JS class 里不写 private 就是可访问的,写 # 才是私有(这是新特性,不是默认)。
constructor 是唯一强制存在的特殊方法
如果你没写 constructor,JavaScript 会自动插入一个空的 constructor() {}。但它只做一件事:初始化 this,并隐式返回新实例。一旦你写了自己的 constructor,就必须手动处理 this 的初始化逻辑,比如赋值 this.name = name。不能跳过,也不能靠“默认”帮你设属性。
static、getter/setter、async 都必须显式声明
这些特性不存在默认状态:
- 不写 static → 就是实例方法
- 不写 get 或 set → 就是普通方法,不是访问器
- 不写 async → 函数不会自动返回 Promise
- 不写 function 关键字(ES6 class 里本来就不写)→ 方法体就是函数体,无额外包装
继承时 super() 不是默认调用,而是强制要求
子类 constructor 中,super() 不是编译器自动补的,默认什么也不做——你不写就会报错。它必须出现在第一行,且负责初始化父类的 this。这和 Java/C# 的隐式 super() 不同,JS 的 class 更“诚实”:你要继承,就得自己明说怎么继承。











