Resumo : neste tutorial, você aprenderá sobre métodos privados JavaScript, incluindo métodos de instância privada, métodos estáticos privados e getter/setter privado.
Introdução aos métodos privados JavaScript
Por padrão, os membros de uma classe são públicos. ES2020 introduziu os membros privados que incluem campos e métodos privados .
Para tornar um método público privado, você prefixa seu nome com um hash #
. JavaScript permite definir métodos privados para métodos de instância, métodos estáticos e getter/setters .
O seguinte mostra a sintaxe de definição de um método de instância privada:
class MyClass {
#privateMethod() {
//...
}
}
Linguagem de código: JavaScript ( javascript )
Nesta sintaxe, #privateMethod
é um método de instância privada. Só pode ser chamado dentro do arquivo MyClass
. Em outras palavras, não pode ser chamado de fora da classe ou nas subclasses do arquivo MyClass
.
Para chamar o #privateMethod
interior do MyClass
, você usa a this
palavra-chave da seguinte forma:
this.#privateMethod();
Linguagem de código: JavaScript ( javascript )
O seguinte ilustra a sintaxe de definição de um método estático privado:
class MyClass {
static #privateStaticMethod() {
//...
}
}
Linguagem de código: JavaScript ( javascript )
Para chamar o #privateStaticMethod()
interior do MyClass
, você usa o nome da classe em vez da this
palavra-chave:
MyClass.#privateStaticMethod();
Linguagem de código: JavaScript ( javascript )
O seguinte mostra a sintaxe dos getters/setters privados:
class MyClass {
#field;
get #myField() {
return #field;
}
set #myField(value){
#field = value;
}
}
Linguagem de código: JavaScript ( javascript )
Neste exemplo, the #myField
é o getter e setter privado que fornece acesso ao campo privado #field
.
Na prática, você usa métodos privados para minimizar o número de métodos que o objeto expõe.
Como regra geral, você deve primeiro tornar todos os métodos de classe privados por padrão. E então você torna um método público sempre que o objeto precisar usar esse método para interagir com outros objetos.
Exemplos de métodos privados JavaScript
Vejamos alguns exemplos de uso de métodos privados
1) Exemplo de método de instância privada
O seguinte ilustra como definir a Person
classe com métodos de instância privada:
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());
Linguagem de código: JavaScript ( javascript )
Saída:
John Doe
Linguagem de código: JavaScript ( javascript )
Neste exemplo:
Primeiro, defina dois campos privados #firstName
e #lastName
no Person
corpo da classe.
Segundo, defina os métodos privados #firstLast()
e #lastFirst()
. Esses métodos retornam o nome completo em diferentes formatos.
Terceiro, defina o método de instância pública getFullName()
que retorna o nome completo de uma pessoa. O getFullName()
método chama o método privado #firstLast()
e #lastFirst()
retorna o nome completo.
Por fim, crie um novo person
objeto e envie o nome completo para o console.
2) Exemplo de método estático privado
O seguinte adiciona o #validate()
método estático privado à Person
classe:
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());
Linguagem de código: JavaScript ( javascript )
Como funciona.
Primeiro, defina o método estático #validate()
que retorna um valor se for uma string com pelo menos três caracteres. Caso contrário, o método levanta uma exceção.
Segundo, chame o #validate()
método estático privado no construtor para validar os argumentos firstName
e lastName
antes de atribuí-los aos atributos privados correspondentes.
Resumo
- Prefixe um nome de método
#
para torná-lo privado. - Métodos privados podem ser chamados dentro da classe, não de fora da classe ou nas subclasses.