
在 JavaScript 类的静态方法中,可通过 this.name 直接获取当前调用该静态方法的类名(如子类 B),无需定义构造函数或实例化对象。
在 javascript 类的静态方法中,可通过 `this.name` 直接获取当前调用该静态方法的类名(如子类 `b`),无需定义构造函数或实例化对象。
当在父类 A 的静态方法中访问 this 时,this 指向的是实际调用该静态方法的类本身(而非父类 A)。因此,在 B.run() 调用中,静态上下文中的 this 就是类 B,而 this.name 自动返回其声明时的类名字符串 "B"。
以下为完整可运行示例:
class A {
static run() {
console.log(this.name); // 输出实际调用类的名称
}
}
class B extends A {}
class C extends A {}
A.run(); // 输出: "A"
B.run(); // 输出: "B"
C.run(); // 输出: "C"
✅ 关键原理说明:
- 静态方法中的
this绑定遵循“调用者绑定”规则——即B.run()中的this是B类的构造函数对象(Function实例),而所有函数对象都具有name属性,值为声明时的标识符。 - 与实例方法不同,静态方法中不需使用
this.constructor.name(该写法在静态上下文中冗余且易误导);this.name简洁、准确、符合规范。
⚠️ 注意事项:
- 若类使用匿名形式(如
const B = class extends A { ... }),则this.name将返回空字符串""或"class"(取决于引擎),因此推荐使用具名类声明以保证可靠性。 - 此方式仅适用于 ES6+ 环境,不兼容 IE 等老旧浏览器。
-
this.name是只读属性,不可被修改,确保了名称的稳定性与安全性。
综上,在无构造函数、无实例化的前提下,this.name 是静态方法中识别调用子类名称最简洁、标准且可靠的方案。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











