javascript oop变量声明应区分状态与行为:类内用公有字段声明实例属性;私有成员用#前缀并const初始化;静态常量用static+全大写命名;方法内局部变量遵循最小作用域原则。

在面向对象编程(OOP)中,JavaScript 的变量声明规范既要遵循通用的 const/let 原则,又要适配类(class)、实例、原型和封装等特性。核心是:**区分“状态”与“行为”,明确生命周期和访问意图,让变量归属清晰、不可误用。**
类内部:用字段声明代替构造函数内 let/const
ES2022 起支持公有实例字段语法,应优先使用,而非在 constructor 里用 let 或 this.xxx = 拼凑:
- ✅ 推荐:直接在类体声明,语义明确、可读性强、支持 IDE 提示
class User {<br> name = '';<br> #token = '';<br> isOnline = false;<br>} - ❌ 避免:在 constructor 中用
let声明局部变量再赋值给this,既冗余又易混淆作用域constructor(name) {<br> let tempName = name.trim();<br> this.name = tempName || 'anonymous';<br>}(tempName应保留为局部变量,但不要用于设置实例状态)
私有成员:统一用井号 # 前缀 + const 初始化
私有字段必须在声明时初始化,且一旦设定就不应被外部或内部逻辑重赋值——这正契合 const 的语义:
- ✅ 推荐:
#id、#apiClient等私有属性,声明即赋值,不暴露修改入口class ApiService {<br> #baseUrl = 'https://api.example.com';<br> #timeout = 5000;<br> #client = new FetchClient(this.#baseUrl);<br>} - ❌ 避免:
let #cache或在方法中重新赋值私有字段(破坏封装性);也不要用var声明私有变量(语法错误且无意义)
静态属性与常量:用 static + const 模式(或全大写命名约定)
类级别的固定配置、枚举、默认值等,应声明为静态且不可变:
- ✅ 推荐:静态字段配合
readonly意图(虽 JS 无readonly关键字,但用const命名习惯强化约束)class Order {<br> static STATUS_PENDING = 'pending';<br> static STATUS_COMPLETED = 'completed';<br> static #MAX_RETRY = 3;<br>} - ✅ 补充:若需真正运行时不可修改,可用
Object.defineProperty冻结,但日常开发中命名 +const前缀已足够传达意图
方法内局部变量:仍坚持“靠近使用、最小作用域”原则
类的方法本质仍是函数,其内部变量规则不变,但需注意与实例属性的区分:
- ✅ 推荐:在 if / for / try 块内声明仅用于该分支的变量,避免污染方法顶部
processOrder() {<br> if (this.#isValid()) {<br> const payload = this.#buildPayload();<br> return this.#send(payload);<br> }<br>} - ✅ 实例属性访问统一用
this.xxx,不混用局部变量模拟(如不用let name = this.name再操作,除非有明确的中间转换意图)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











