ECMAScript 2018:如何在类中使用 private 和 protected 关键字

ECMAScript 2018 是 JavaScript 的最新标准,其中增加了对类的支持。在类中,我们可以使用 private 和 protected 关键字来限制属性和方法的访问权限。本文将详细介绍如何在类中使用 private 和 protected 关键字,并提供示例代码和指导意义。

private 关键字

private 关键字用于限制类中的属性和方法只能在类内部访问,外部无法访问。在类中使用 private 关键字,需要在属性或方法前加上 # 符号。

示例代码:

class Person {
  #name;

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

  getName() {
    return this.#name;
  }

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

const person = new Person('Tom');
console.log(person.#name); // SyntaxError: Private field '#name' must be declared in an enclosing class
console.log(person.getName()); // Tom
person.setName('Jerry');
console.log(person.getName()); // Jerry

在上面的示例代码中,我们定义了一个 Person 类,其中包含一个私有属性 #name 和两个公有方法 getName 和 setName。在创建 Person 实例后,我们无法直接访问私有属性 #name,但可以通过公有方法 getName 和 setName 来访问和修改 #name 的值。

需要注意的是,private 关键字只能在类中使用,无法在类外部使用。如果在类外部访问类中的私有属性或方法,会导致 SyntaxError。

protected 关键字

protected 关键字用于限制类中的属性和方法只能在类内部和子类中访问,外部无法访问。在类中使用 protected 关键字,需要在属性或方法前加上 _ 符号。

示例代码:

class Animal {
  _name;

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

  getName() {
    return this._name;
  }

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

class Cat extends Animal {
  meow() {
    console.log(`${this._name} meows.`);
  }
}

const animal = new Animal('Animal');
console.log(animal._name); // Animal
console.log(animal.getName()); // Animal
animal.setName('Dog');
console.log(animal.getName()); // Dog

const cat = new Cat('Kitty');
console.log(cat._name); // undefined
console.log(cat.getName()); // Kitty
cat.setName('Garfield');
console.log(cat.getName()); // Garfield
cat.meow(); // Garfield meows.

在上面的示例代码中,我们定义了一个 Animal 类和一个 Cat 类,其中 Cat 类是 Animal 类的子类。Animal 类中包含一个受保护的属性 _name 和两个公有方法 getName 和 setName。Cat 类中新增了一个方法 meow,可以访问父类中的受保护属性 _name。

在创建 Animal 实例后,我们可以通过公有方法 getName 和 setName 来访问和修改受保护属性 _name 的值。在创建 Cat 实例后,我们无法直接访问受保护属性 _name,但可以通过公有方法 getName 和子类的方法 meow 来访问 _name 的值。

需要注意的是,protected 关键字可以在子类中使用,但无法在类外部使用。如果在类外部访问类中的受保护属性或方法,会导致 ReferenceError。

指导意义

使用 private 和 protected 关键字可以有效地封装类的属性和方法,防止外部直接访问和修改,提高代码的安全性和可维护性。在使用 private 和 protected 关键字时,需要注意以下几点:

  • private 和 protected 关键字只能在类中使用,无法在类外部使用。
  • private 和 protected 关键字不影响属性或方法的值或行为,只限制访问权限。
  • private 和 protected 关键字可以结合使用,如 #_name 表示一个私有受保护属性。
  • private 和 protected 关键字只是一种约定,不能完全防止外部访问和修改,需要配合其他技术手段来保证代码的安全性。

总结

在 ECMAScript 2018 中,我们可以使用 private 和 protected 关键字来限制类中属性和方法的访问权限。private 关键字用于限制类内部访问,protected 关键字用于限制类内部和子类访问。使用 private 和 protected 关键字可以有效地封装类的属性和方法,提高代码的安全性和可维护性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c02f2eadd4f0e0ff9eb788