"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que os membros do objeto JavaScript prototipados à medida que as matrizes são compartilhadas nas instâncias de classe?

Por que os membros do objeto JavaScript prototipados à medida que as matrizes são compartilhadas nas instâncias de classe?

Publicado em 2024-12-22
Navegar:377

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

Membros de objetos JavaScript prototipados como matrizes: compartilhados entre instâncias de classe

Ao criar protótipos de matrizes em JavaScript, é crucial entender que esses membros se tornam compartilhados entre todas as instâncias de classe. Esse comportamento pode parecer contra-intuitivo se você estiver acostumado com membros de objetos privados.

Explicação do comportamento

O mecanismo de protótipo do JavaScript permite que objetos herdem propriedades e métodos de um objeto pai, conhecido como protótipo. Quando você define um array como uma propriedade no protótipo, ele se torna acessível a todos os objetos que herdam desse protótipo.

O script de exemplo demonstra este comportamento:

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

Com a linha comentada descomentada, cada instância do Sandwich teria seu próprio array de ingredientes privados. No entanto, com a linha comentada, todas as instâncias compartilham a mesma matriz de protótipo.

Isso significa que adicionar um ingrediente ao cheeseburger também atualiza os ingredientes de blt e picante_chicken_sandwich. Para evitar isso, você deve definir o array de ingredientes dentro do construtor, conforme mostrado no exemplo atualizado abaixo:

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

Protótipo vs. Instância

É essencial distinguir entre propriedades de protótipo e propriedades de instância. As propriedades do protótipo são compartilhadas por todos os objetos que herdam desse protótipo, enquanto as propriedades da instância são exclusivas para cada objeto.

  • Atribua propriedades ao protótipo para definir dados ou métodos compartilhados.
  • Atribua propriedades ao protótipo para definir dados ou métodos compartilhados.
Atribua propriedades ao protótipo para definir dados ou métodos compartilhados. propriedades para a instância dentro do construtor para definir dados específicos da instância.

Modificações de código para corrigir o Comportamento

No script de exemplo, descomente a linha this.ingredients = []; dentro do construtor Sandwich garante que cada instância tenha sua própria matriz de ingredientes, conforme pretendido.

Conclusão

Compreender o comportamento de matrizes prototipadas em JavaScript é crucial para evitar compartilhamento inesperado entre instâncias de classe. Lembre-se sempre de que os dados que devem ser específicos da instância devem ser definidos no construtor, enquanto os dados compartilhados podem ser atribuídos ao protótipo por meio de herança.Why do JavaScript Object Members Prototyped as Arrays Become Shared Across Class Instances?

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3