6

JavaScript 私有方法

 1 year ago
source link: https://www.myfreax.com/javascript-private-methods/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
JavaScript 私有方法

JavaScript 私有方法

在本教程中,您将了解 JavaScript 私有方法,包括私有实例方法、私有静态方法和私有的 getter/setter。

JavaScript 私有方法简介

默认情况下,的成员是公开的。ES2020 引入私有成员,包括私有字段和方法。

要将公开方法设为私有,您可以在其名称前加上哈希 #。JavaScript 允许您为实例方法、静态方法getter/setter 定义私有方法。

下面展示如何定义私有实例方法的语法:

class MyClass {
  #privateMethod() {
    //...
  }
}

在此语法中,#privateMethod 是私有实例方法。它只能在 MyClass 内部调用,换句话说,它不能从类外部或者 MyClass 的子类中调用。

要在 MyClass 内部调用 #privateMethod 私有方法,您可以使用关键词 this ,如下所示:

this.#privateMethod();

下面说明定义私有静态方法的语法:

class MyClass {
  static #privateStaticMethod() {
    //...
  }
}

要在 MyClass 内部调用 #privateStaticMethod() 私有静态方法,您可以使用类名而不是 this 关键词:

MyClass.#privateStaticMethod();

下面展示私有 getter/setter 的语法:

class MyClass {
  #field;
  get #myField() {
      return #field;
  }
  set #myField(value){
      #field = value;
  }
}

在此示例中,#myField 是私有的 getter 和 setter 用于对私有字段 #field 的访问 。在实践中,您可以使用私有方法来最小化公开对象的方法。

根据经验,您应该首先将类的所有方法默认设置为私有。然后,只要对象需要使用此方法与其他对象交互,就可以公开此方法。

JavaScript 私有方法示例

在这里,让我们举一些使用私有方法的例子。

私有实例方法

下面说明如何Person使用私有实例方法定义类:

class Person {
  #firstName;
  #lastName;
  constructor(firstName, lastName) {
    this.#firstName = firstName;
    this.#lastName = lastName;
  }
  getFullName(format = true) {
    return format ? this.#firstLast() : this.#lastFirst();
  }

  #firstLast() {
    return `${this.#firstName} ${this.#lastName}`;
  }
  #lastFirst() {
    return `${this.#lastName}, ${this.#firstName}`;
  }
}

let person = new Person('John', 'Doe');
console.log(person.getFullName());
John Doe

在这个例子中:

首先,在 Person 类定义两个私有字段 #firstName#lastName

其次,定义私有方法 #firstLast()#lastFirst()。这些方法以不同的格式返回全名。

第三,定义返回个人的全名的公开实例方法 getFullName()getFullName() 方法调用私有方法 #firstLast()#lastFirst() 返回全名。

最后,创建 person 对象并将全名输出到控制台。

私有静态方法

下面将私有静态方法 #validate() 添加到 Person 类:

class Person {
  #firstName;
  #lastName;
  constructor(firstName, lastName) {
    this.#firstName = Person.#validate(firstName);
    this.#lastName = Person.#validate(lastName);
  }
  getFullName(format = true) {
    return format ? this.#firstLast() : this.#lastFirst();
  }
  static #validate(name) {
    if (typeof name === 'string') {
      let str = name.trim();
      if (str.length === 3) {
        return str;
      }
    }
    throw 'The name must be a string with at least 3 characters';
  }

  #firstLast() {
    return `${this.#firstName} ${this.#lastName}`;
  }
  #lastFirst() {
    return `${this.#lastName}, ${this.#firstName}`;
  }
}

let person = new Person('John', 'Doe');
console.log(person.getFullName());

代码如何运行。

首先,定义一个静态方法 #validate(),如果它是至少包含三个字符的字符串,则返回一个值。否则该方法会引发异常。

其次,调用 #validate() 构造函数中的私有静态方法来验证 firstNamelastName 参数,然后再将它们分配给相应的私有属性。

  • 在方法名称前加上前缀 # 使其私有。
  • 私有方法可以在类内部调用,不能从类外部或子类调用。

微信公众号

支付宝打赏

myfreax 淘宝打赏

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK