返回

JS私有属性和只读属性的初学者指南

前端

在JavaScript中,属性是对象或类的特性,它可以存储数据或执行操作。属性通常分为两种类型:私有属性和只读属性。

私有属性

私有属性是只允许在类内部访问的属性。这意味着,私有属性不能在类外部被直接访问或修改。私有属性通常用于存储敏感数据或实现封装。

在JavaScript中,使用符号(symbol)来定义私有属性。符号是一种唯一标识符,它可以确保私有属性不会与其他属性发生冲突。

class MyClass {
  #privateProperty = 10;

  // 私有方法
  #privateMethod() {
    console.log("This is a private method.");
  }
}

const instance = new MyClass();

// 尝试访问私有属性
console.log(instance.#privateProperty); // 报错:Cannot access private property

// 尝试调用私有方法
instance.#privateMethod(); // 报错:Cannot access private method

只读属性

只读属性是只能被读取的属性。这意味着,只读属性不能被直接修改。只读属性通常用于存储常量数据或防止属性被意外修改。

在JavaScript中,使用getter和setter方法来定义只读属性。getter方法用于获取只读属性的值,setter方法用于设置只读属性的值。

class MyClass {
  // 只读属性
  get readOnlyProperty() {
    return this.#privateProperty;
  }

  // 私有属性
  #privateProperty = 10;
}

const instance = new MyClass();

// 获取只读属性的值
console.log(instance.readOnlyProperty); // 10

// 尝试修改只读属性的值
instance.readOnlyProperty = 20; // 报错:Cannot set property 'readOnlyProperty' of object '#<MyClass>' which has only a getter

私有属性和只读属性的区别

私有属性和只读属性的主要区别在于,私有属性不能在类外部被访问或修改,而只读属性只能被读取,但不能被修改。

私有属性和只读属性的使用场景

私有属性通常用于存储敏感数据或实现封装。例如,一个类的密码属性通常是私有的,这样其他类就不能访问或修改密码。

只读属性通常用于存储常量数据或防止属性被意外修改。例如,一个类的版本号属性通常是只读的,这样其他类就不能意外修改版本号。

总之,私有属性和只读属性都是JavaScript中非常有用的特性,它们可以帮助我们提高代码的安全性、可读性和可维护性。