javascript类中方法和属性需区分实例与静态:实例属性/方法在constructor中用this初始化,类体内以简洁签名定义;静态成员加static关键字;私有成员统一用#前缀。

JavaScript Class 中定义方法和属性,核心是区分“实例属性/方法”和“静态成员”,且语法上不写 function 关键字,也不用逗号分隔。
实例属性与构造函数绑定
类中不能直接写 this.name = 'xxx' 这样的语句来声明实例属性(ES2022 起支持类字段语法,但需注意兼容性)。最稳妥、最通用的方式是在 constructor 中初始化:
-
constructor是唯一自动调用的初始化函数,必须用它来设置实例属性 - 属性名前不加
var/let/const,直接通过this.xxx赋值 - 例如:
this.id = Date.now(); this.tags = [];
实例方法直接写签名,不加 function
所有挂载到原型上的方法(即每个实例都能调用的方法),都以简洁签名形式写在类体内,不带 function 关键字,也不加分号(虽加了也不报错,但非标准写法):
- 普通方法:
render() { console.log(this.name); } - 箭头函数不能作为类方法(会破坏
this绑定,且语法非法) - 这些方法默认不可枚举——
for...in或Object.keys()看不到它们
静态属性和方法用 static 关键字
用 static 修饰的成员属于类本身,不随实例创建而复制,也不能被实例访问:
- 静态方法:
static createDefault() { return new MyClass('default'); } - 静态属性(ES2022+):
static version = '1.2.0';(旧环境需在类外赋值:MyClass.count = 0;) - 调用方式固定:只能用
MyClass.staticMethod(),不能用new MyClass().staticMethod()
私有成员用 # 符号声明和访问
ES2022 起正式支持私有字段和私有方法,统一用井号 # 开头,仅在类内部可访问:
- 私有属性:
#secret = 'abc';,读写都必须带#,如this.#secret - 私有方法:
#validate() { return true; },可在其他方法中用this.#validate()调用 - 外部访问会直接报错:
inst.#secret→SyntaxError,不是undefined - 注意:# 不是命名约定,而是语法强制要求,漏写或错写都会导致解析失败
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











