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

167
Vistas
¿Por qué las clases extendidas usan prototipos para métodos pero no para campos?

Mirando este código simple:

 class Animal { someField = 42; animalFunc() { console.log('animal') } } class Lion extends Animal { lionFunc() { console.loge('lion') } } let lion = new Lion(); console.log(lion)

El resultado en Chrome es:

ingrese la descripción de la imagen aquí

Como podemos ver, los métodos de instancia están en el prototipo (para cada función constructora)

Pregunta:

¿Por qué los campos, a diferencia de los métodos, no están en el prototipo?
Quiero decir, someField está en Animal , no en Lion .

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Este es el comportamiento previsto como se ve en ECMAScript - 15.7.14 Runtime Semantics: ClassDefinitionE Evaluation 25.f :

 f. Else if element is a ClassFieldDefinition Record, then i. If IsStatic of e is false, append element to instanceFields. ii. Else, append element to staticElements.

y en 29. :

 Set F.[[Fields]] to instanceFields.

Entonces, después de ver que esto no es un error, veamos por qué:

En palabras simples:

Como sabemos, si tenemos una función en el prototipo y cambiamos el valor de esa función, se cambiaría para todos.

Si colocamos la propiedad en el prototipo y alguna instancia cambia el valor de la propiedad, también cambiaría el valor de la propiedad en otras instancias y, naturalmente, este comportamiento no debería ocurrir, por lo que colocamos las propiedades en la instancia misma.

Para las propiedades estáticas, este es el comportamiento previsto, ya que solo tenemos una instancia de ellas, por eso están en el prototipo.

Extra:

este comentario de Ranando D Washington-King de la propuesta de campos de clase

La cita que menciono es sobre el problema de agregar una propiedad de datos x al prototipo [...] :

Cada instancia tiene una copia del objeto. La expectativa puede o no ser exactamente eso. Considere en Java, la capacidad de definir clases anidadas. En ese caso, definitivamente es el deseo de que cada instancia pueda ver exactamente la misma definición de clase. Por otro lado, considere asignar una matriz vacía. La intención probable es que cada instancia tenga su propia copia de esa matriz para almacenar valores específicos de la instancia.

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