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.
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ãoCompreender 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.
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