Campos de nivel de clase de JavaScript

En cualquier lenguaje de programación orientado a objetos, las clases pueden tener campos públicos y privados. Los campos no son más que variables que contienen la información. Hay dos tipos de campos en un lenguaje de programación orientado a objetos, es decir, campos de instancia y campos estáticos. Un miembro de instancia pertenece a una instancia específica. 

Ejemplo: si creamos 3 instancias (objetos), habrá 3 copias de los campos de instancia en la memoria, mientras que solo habrá una copia de un campo estático sin importar cuántas instancias creemos. En palabras simples, una variable estática es una variable que es común para todos los objetos.

Campos de Instancia Privada: Por defecto, todas las propiedades de una Clase son públicas y se pueden modificar fuera de la clase. Entonces, para declarar un campo de clase privado, necesitamos usar un prefijo #.

Sintaxis:

#variableName

Veamos el siguiente ejemplo: 

Javascript

<script>
class IncrementCounter {
 
    // Private variable
    #value = 0;
 
    // Public variable
    Count = 0;
 
    Increment() {
        this.#value++;
    }
}
 
const counter = new IncrementCounter();
 
// Raises an error
console.log(counter.#value);
 
// Calling the increment function
counter.increment();
 
// Printing the private variable value
console.log(counter.#value);
</script>

Producción:

consola.log(contador.#valor); 
^
SyntaxError: el campo privado ‘#value’ debe declararse en una clase 
adjunta en wrapSafe (internal/modules/cjs/loader.js:1054:16) 
en Module._compile (internal/modules/cjs/loader.js:1102: 27) 
en Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10) 
en Module.load (internal/modules/cjs/loader.js:986:32) 
en Function.Module. _load (internal/modules/cjs/loader.js:879:14) 
en Function.executeUserEntryPoint [como runMain] (internal/modules/run_main.js:71:12) 
en internal/main/run_main_module.js:17:47

Explicación: En el ejemplo anterior, estamos declarando una variable privada usando #. Ejecutar el script anterior mostrará un error como «El campo privado ‘#valor’ debe declararse en una clase adjunta», ya que estamos tratando de acceder a una variable privada fuera de la clase. Así que tratamos de obtener el valor definiendo una función de la siguiente manera:

Javascript

<script>
class IncrementCounter {
    #value = 0;
 
    increment() {
        this.#value++;
    }
 
    value() {
 
        // Returning the value of
        // a private variable
        return this.#value;
    }
}
 
const counter = new IncrementCounter();
 
// Calling the function value()
console.log(counter.value());
 
// Calling the function increment()
counter.increment();
 
// Calling the function value()
console.log(counter.value());
</script>

Producción:  

0
1

Campos estáticos privados: se puede crear un campo estático utilizando la palabra clave estática. A veces, incluso los campos estáticos se mantienen ocultos y puede hacerlos privados. 

Sintaxis:

static #staticFieldName

Veamos el siguiente ejemplo: 

Javascript

<script>
class User {
 
    // Private static field of string type
    static #name = "";
 
    // Private static field
    static #age
 
    // Constructor function
    Person(user_name, user_age) {
        User.#name = user_name;
        User.#age = user_age;
        return User.#name + ' ' + User.#age;
    }
}
 
// Create an object user1
user1 = new User();
console.log(user1.Person("John", 45));
 
// Create an object user2
user2 = new User()
console.log(user1.Person("Mark", 35));
</script>

Producción:

John 45
Mark 35

Explicación: para invocar un campo estático, necesitamos usar el nombre de la clase constructora. En el ejemplo anterior, estamos creando un nombre de campo estático privado usando la palabra clave static y # para el campo privado e inicializándolo en una string vacía. Del mismo modo, estamos creando una edad de campo estático privado. Ahora, para invocar los campos creados anteriormente, estamos usando el nombre de la clase constructora Usuario como Usuario.#nombre y Usuario.#edad. 

Campos de instancia pública: de forma predeterminada, todas las propiedades de una clase son públicas y se puede acceder a ellas fácilmente fuera de la clase. Puede inicializar el valor de la variable junto con la declaración.

Veamos el siguiente ejemplo:

Javascript

<script>
class IncrementCounter {
 
    // Public instance field
    value = 1;
 
    Increment() {
        return this.value++;
    }
}
 
const counter = new IncrementCounter();
 
// Accessing a public instance field
console.log(counter.value);
 
// Calling the Increment function
counter.Increment();
 
// Printing the updated value
console.log(counter.value);
</script>

Producción:

1
2

Explicación:  En el ejemplo anterior, el valor se declara como una instancia pública y se inicializa en 1, por lo que podemos acceder fácilmente a él mediante contador.valor . No hay restricciones para acceder y modificar un campo de instancia pública dentro del constructor, los métodos y también fuera de la clase.

Campos estáticos públicos: como hemos discutido antes, los campos estáticos se crean utilizando la palabra clave estática como static staticFieldName. 

Veamos el siguiente ejemplo:

Javascript

<script>
class Example {
 
    // Private static field
    static value = 42;
}
 
// Accessing a public static field using
// name of the Constructor class
console.log(Example.value)
 
console.log(Example.value === 42);
</script>

Producción:

42
true

Explicación:  Como puede ver, podemos acceder fácilmente al campo estático público fuera de la clase usando el nombre de la clase.  

Publicación traducida automáticamente

Artículo escrito por namaldesign y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *