返回

在 JavaScript 和 TypeScript 中探索私有领域

前端

JavaScript 私有类字段

JavaScript 在 ES2022 版本中引入了私有类字段的概念。私有类字段使用井号(#)符号作为前缀来标识。例如:

class MyClass {
  #privateField = "secret";

  constructor() {
    // 可以访问私有字段
    console.log(this.#privateField); // "secret"
  }

  // 私有方法
  #privateMethod() {
    // 可以访问私有字段
    console.log(this.#privateField); // "secret"
  }

  // 公共方法
  publicMethod() {
    // 无法访问私有字段
    // console.log(this.#privateField); // ReferenceError
  }
}

const instance = new MyClass();
// 无法访问私有字段
console.log(instance.#privateField); // ReferenceError

TypeScript 私有修饰符

TypeScript 中的私有修饰符与 JavaScript 中的私有类字段类似。私有修饰符使用 private 来标识私有成员。例如:

class MyClass {
  private privateField = "secret";

  constructor() {
    // 可以访问私有字段
    console.log(this.privateField); // "secret"
  }

  // 私有方法
  private privateMethod() {
    // 可以访问私有字段
    console.log(this.privateField); // "secret"
  }

  // 公共方法
  publicMethod() {
    // 无法访问私有字段
    // console.log(this.privateField); // Error: Cannot access 'privateField' because it is private.
  }
}

const instance = new MyClass();
// 无法访问私有字段
console.log(instance.privateField); // Error: Cannot access 'privateField' because it is private.

比较 JavaScript 私有类字段和 TypeScript 私有修饰符

JavaScript 私有类字段和 TypeScript 私有修饰符在功能上非常相似。它们都允许我们定义私有成员,这些私有成员只能在类及其派生类中访问。然而,它们之间也存在一些细微的差别:

  • 语法: JavaScript 私有类字段使用井号(#)符号作为前缀,而 TypeScript 私有修饰符使用 private 关键字。
  • 作用域: JavaScript 私有类字段的作用域仅限于该类的实例,而 TypeScript 私有修饰符的作用域可以扩展到类的派生类。
  • 兼容性: JavaScript 私有类字段需要 ES2022 或更高版本的支持,而 TypeScript 私有修饰符则需要 TypeScript 编译器。

结论

JavaScript 私有类字段和 TypeScript 私有修饰符都是用于实现私有成员的强大特性。它们可以帮助我们更好地控制数据的可见性,提高代码的可维护性和安全性。通过理解这些概念,我们可以编写出更健壮、更易维护的 JavaScript 和 TypeScript 代码。