在 JS 中创建一个真正的 private 方法有什么缺点?
每个对象都会创建一个 private 方法的副本,这样很耗费内存。
var Employee = function(name, company, salary) {
this.name = name || "";
this.company = company || "";
this.salary = salary || 5000;
// Private method
var increaseSalary = function() {
this.salary = this.salary + 1000;
};
// Public method
this.displayIncreasedSalary = function() {
increaseSalary.call(this);
console.log(this.salary);
};
};
// Create Employee class object
var emp1 = new Employee("John", "Pluto", 3000);
var emp2 = new Employee("Merry", "Pluto", 2000);
var emp3 = new Employee("Ren", "Pluto", 2500);
在这里 emp1、emp2、emp3 都有一个 increaseSalary 私有方法的副本。
补充:
- 这种"在构造函数里定义私有方法"的方式实质上是用 闭包 实现封装,每个实例都会创建一份新的闭包,造成内存浪费(注意原代码中
increaseSalary没有绑定this,原文调用也有笔误)。- ES6 之后推荐的私有写法:
class Employee { #increaseSalary() { // 私有方法 this.salary += 1000; } displayIncreasedSalary() { this.#increaseSalary(); console.log(this.salary); } }- 兼容性:
#私有字段/方法要求 ES2022+(Chrome 74+、Safari 14.1+),老项目可继续用 TypeScriptprivate关键字或 WeakMap 模拟。



