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