返回

ES Class:理解私有属性

前端

我们已经习惯了 JavaScript 中的传统面向对象编程,即通过原型链来创建对象和管理对象的行为。但 ES6 中引入的 Class 语法糖,为 JavaScript 带来了更简洁、更具表现力的面向对象编程体验。在这个新的语法糖中,有一个重要的概念就是私有属性。

什么是私有属性?

私有属性,顾名思义,是一种只能在类的内部访问的属性。它通常用于保护敏感数据或实现类的封装性。

如何定义私有属性?

ES Class 中的私有属性可以通过使用 # 符号来定义。例如,以下代码定义了一个带有私有属性 #name 的类:

class Person {
  #name;

  constructor(name) {
    this.#name = name;
  }

  getName() {
    return this.#name;
  }
}

请注意,私有属性只能在类的内部访问,因此,无法在类的外部直接访问 #name 属性。为了访问私有属性,你需要使用类的方法。在上面的例子中,我们定义了一个 getName 方法,用于获取私有属性 #name 的值。

私有属性的访问修饰符

ES Class 中的私有属性还支持访问修饰符,这让你可以进一步控制属性的可见性。ES Class 中的访问修饰符有三个:

  • public:公共属性,可以在类的内部和外部访问。
  • protected:受保护的属性,可以在类的内部和派生类中访问。
  • private:私有属性,只能在类的内部访问。
class Person {
  #name; // 私有属性

  constructor(name) {
    this.#name = name;
  }

  getName() {
    return this.#name;
  }

  setName(name) {
    this.#name = name;
  }
}

// 创建一个 Person 对象
const person = new Person('John Doe');

// 尝试访问私有属性
console.log(person.#name); // 报错,无法访问私有属性

// 使用方法访问私有属性
console.log(person.getName()); // 输出:John Doe

// 使用方法修改私有属性
person.setName('Jane Doe');

// 再次使用方法访问私有属性
console.log(person.getName()); // 输出:Jane Doe

私有属性的最佳实践

  • 谨慎使用私有属性:私有属性虽然可以保护数据和实现类的封装性,但过多使用私有属性可能会让代码难以维护和理解。因此,应谨慎使用私有属性,只在必要时才使用。
  • 使用访问修饰符:访问修饰符可以让你更好地控制属性的可见性,从而提高代码的安全性。建议你合理使用访问修饰符,以确保类的属性具有适当的访问级别。
  • 在构造函数中初始化私有属性:在构造函数中初始化私有属性是一个好习惯,这样可以确保私有属性在对象创建时就被正确设置。
  • 不要在类的外部直接访问私有属性:私有属性只能在类的内部访问,因此,不要在类的外部直接访问私有属性。如果需要访问私有属性,应使用类的方法。
  • 避免在私有属性上使用 delete 运算符:delete 运算符可以删除对象的属性,但它不能删除私有属性。如果你尝试在私有属性上使用 delete 运算符,将会抛出错误。

希望这篇文章能帮助你更好地理解 ES Class 中的私有属性。合理使用私有属性可以提高代码的安全性、封装性和可维护性。