
1. 大白话比喻公有Public相当于你的微信头像和昵称。谁都能看随便点进去就能访问改了大家也都知道。私有Private相当于你的银行卡密码。只有你自己类内部的方法知道别人从外面想直接看或者改门儿都没有报错。2. 语法怎么写记住#这个符号在 JS 里私有的标志就是#号不加#默认全都是公有的。class BankAccount { // 公有属性外面随便看 publicName 张三的账户; // 私有属性加 #外面绝对看不到 #balance 1000; // 私有方法加 #内部工具函数外面调不动 #reduceFee() { console.log(内部扣手续费逻辑); } // 公有的方法专门用来操作私有密码 getMoney(amount) { if (amount this.#balance) { this.#balance - amount; this.#reduceFee(); // 内部可以调用私有方法 return 取款成功; } return 余额不足; } // 公有的查看余额方法只能看不能改 checkBalance() { return this.#balance; } } let myAccount new BankAccount(); // 公有随便访问 console.log(myAccount.publicName); // 输出张三的账户 ✅ // 私有强行访问直接报语法错误 console.log(myAccount.#balance); // ❌ 报错Private field #balance must be declared in an enclosing class console.log(myAccount.#reduceFee());// ❌ 报错外面调不动3. 继承儿子和爹的关系这里有一个重要的坑要记住私有属性亲爹不传儿子就算是儿子子类继承了爹父类儿子也绝对看不到爹的#私有属性和方法。爹藏起来的密码亲儿子也不能直接碰。class Son extends BankAccount { test() { console.log(this.#balance); // ❌ 报错儿子也看不到爹的私有密码 } }4. 补充一个老古董知识点面试常问在#出现之前老一辈程序员习惯用_下划线比如_balance来表示“这是私有的别动我”。注意_balance其实是假的私有它只是程序员的“君子协定”我加了下划线提醒你别碰但你非要myAccount._balance 999代码照样能跑拦不住你。而#balance是真正的铁锁JS 引擎从底层就不让你访问谁来了都不好使。总结一句顺口溜不加#是公有人人都能摸一摸加上#是私有亲儿子来也发抖下划线是假把式真锁还得靠#头。现在你知道了权限下一个问题肯定是那我为什么要费劲搞私有呢最大的好处就是防止外部乱改。比如余额只能是正数如果全部公开外面来个account.balance -1000就乱套了但做成私有逼着外部只能通过你提