Breve histórico: No JavaScript, a função construtora para cada tipo de objeto possui uma prototype
propriedade. A prototype
refere-se a um objecto que cada uma construída usos objeto como o próximo passo na sua cadeia de protótipos. Quando você deseja que um tipo seja inerente a outro, você pode definir o prototype
tipo filho como uma nova instância do tipo pai.
Por exemplo:
var Parent = function() { /* constructor business */ }
Parent.prototype.parentProp = "some parent property";
var Child = function() { /* constructor business */ }
Child.prototype = /*** !! Some prototype object goes here !! ***/
Minha pergunta pergunta sobre qual código deve estar no " Some prototype object goes here
" lugar no código acima. Meu primeiro instinto é construir uma instância do pai (isto é, new Parent()
), mas em um comentário a uma resposta sobre Esta é uma maneira segura de copiar um objeto de protótipo para outro? , um usuário escreve:
Não, não use
new bar()
para o objeto protótipo!
(... que é uma opinião que já vi em muitas respostas e comentários do SO, mas este é o único exemplo que tenho em mãos no momento.)
A outra opção é usar Object.create(Parent.prototype)
como Child.prototype
. Até onde eu sei, isso também cria uma nova Parent
instância, mas não executa o Parent
construtor.
Alguém pode explicar por que evitar a execução da função construtora ao gerar um objeto de protótipo a partir de um tipo pai? Existe algum problema técnico significativo (talvez com vários níveis de herança)? Ou esse padrão é um uso indevido de construtores que entra em conflito com algumas práticas recomendadas prototípicas (por exemplo, executar o construtor ao criar um protótipo viola alguma separação de preocupações)?
Object.create
é implementado.