"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué los miembros de objetos JavaScript creados como prototipos como matrices se comparten entre instancias de clase?

¿Por qué los miembros de objetos JavaScript creados como prototipos como matrices se comparten entre instancias de clase?

Publicado el 2024-12-22
Navegar:565

Why do JavaScript Object Members Prototyped as Arrays Become Shared Across Class Instances?

Miembros de objetos de JavaScript creados como prototipos como matrices: compartidos entre instancias de clase

Al crear prototipos de matrices en JavaScript, es fundamental comprender que estos miembros se comparten entre todas las instancias de clase. Este comportamiento puede parecer contradictorio si está acostumbrado a los miembros de objetos privados.

Explicación del comportamiento

El mecanismo prototipo de JavaScript permite que los objetos hereden propiedades y métodos de un objeto principal, conocido como prototipo. Cuando define una matriz como una propiedad en el prototipo, se vuelve accesible para todos los objetos que heredan de ese prototipo.

El script de ejemplo demuestra este comportamiento:

function Sandwich() {
    // Uncomment this to fix the problem
    //this.ingredients = [];
}

Con la línea comentada sin comentar, cada instancia de Sandwich tendría su propia matriz de ingredientes privada. Sin embargo, con la línea comentada, todas las instancias comparten la misma matriz de prototipo.

Esto significa que agregar un ingrediente a la hamburguesa con queso también actualiza los ingredientes de blt y picante_chicken_sandwich. Para evitar esto, debe definir la matriz de ingredientes dentro del constructor, como se muestra en el ejemplo actualizado a continuación:

function Sandwich() {
    this.ingredients = [];
}

Prototipo versus instancia

Es esencial distinguir entre propiedades de prototipo y propiedades de instancia. Las propiedades del prototipo son compartidas por todos los objetos que heredan de ese prototipo, mientras que las propiedades de la instancia son únicas para cada objeto.

  • Asigne propiedades al prototipo para definir datos o métodos compartidos.
  • Asignar propiedades a la instancia dentro del constructor para definir datos específicos de la instancia.

Modificaciones de código para arreglar el Comportamiento

En el script de ejemplo, descomentar la línea this.ingredients = []; dentro del constructor Sandwich garantiza que cada instancia tenga su propia matriz de ingredientes, según lo previsto.

Conclusión

Comprender el comportamiento de las matrices prototipadas en JavaScript es crucial para evitar el intercambio inesperado entre instancias de clase. Recuerde siempre que los datos que deben ser específicos de la instancia deben definirse dentro del constructor, mientras que los datos compartidos se pueden asignar al prototipo mediante herencia.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3