Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

146
Vistas
¿Los campos privados de JavaScript son privados por clase o por instancia?

JavaScript agregó recientemente campos de clase privada, nombrados con un prefijo hash.

( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Private_class_fields )

Estoy buscando una respuesta clara sobre si esta forma de privacidad es "por clase" o "por instancia".

Digamos que una clase de Persona se define con un campo privado llamado '#secreto'.

Uso 'nuevo' para construir dos instancias de la clase Person: person1 y person2.

¿Persona1 tiene acceso para inspeccionar y modificar el campo #secreto de persona2?

 class Person { #secret; constructor(secret) { this.#secret = secret; } getSomebodyElsesSecret(somebody) { return somebody.#secret; } setSomebodyElsesSecret(somebody, value) { somebody.#secret = value; } }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Son por clase: una instancia puede ver y modificar otra instancia.

 class Person { #secret; constructor(secret) { this.#secret = secret; } getSomebodyElsesSecret(somebody) { return somebody.#secret; } setSomebodyElsesSecret(somebody, value) { somebody.#secret = value; } } const a = new Person('a'); const b = new Person('b'); console.log(a.getSomebodyElsesSecret(b)) a.setSomebodyElsesSecret(b, 'c'); console.log(a.getSomebodyElsesSecret(b))

Una forma de verlo es que los campos privados son similares a las variables con alcance solo para la clase : se puede hacer referencia a ellos como se quiera por cualquier cosa dentro de {} de la clase, y no se puede hacer referencia fuera.

En términos de alcance, es un poco como un WeakMap que define las variables privadas y un IIFE que devuelve la clase:

 const Person = (() => { const secrets = new WeakMap(); return class Person { constructor(secret) { secrets.set(this, secret); } getSomebodyElsesSecret(somebody) { return secrets.get(somebody); } setSomebodyElsesSecret(somebody, value) { secrets.set(somebody, value); } } })(); const a = new Person('a'); const b = new Person('b'); console.log(a.getSomebodyElsesSecret(b)) a.setSomebodyElsesSecret(b, 'c'); console.log(a.getSomebodyElsesSecret(b))

about 4 years ago · Juan Pablo Isaza Denunciar

0

No. Si era público, puede acceder a él como person2.secret pero ahora es privado, lo que significa que no puede acceder directamente fuera de la clase.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda