// definindo uma 'classe' pessoa
function Pessoa(nome, idade){
// atributos
this.nome = nome
this.idade = idade
// metodos
this.falar = function(){
console.log(`Meu nome e ${this.nome} e tenho ${this.idade} anos`)
}
}
//incluindo novo método para pessoa com prototype
Pessoa.prototype.puxarAssunto = function(){
console.log(`Tá quente né?`)
}
const pessoa1 = new Pessoa('Cleitinho', 13)
pessoa1.falar()
pessoa1.puxarAssunto()
Vantagem: O método falar
tem acesso direto às variáveis nome
e idade
da instância, sem a necessidade de usar this
.
Desvantagem: Cada instância da classe Pessoa
terá sua própria cópia do método falar
. Isso significa que se você criar 1000 instâncias de Pessoa
, haverá 1000 cópias do método falar
na memória, o que pode ser ineficiente.
Vantagem:
Pessoa
compartilham a mesma cópia do método puxarAssunto
. Isso significa que, independentemente do número de instâncias criadas, haverá apenas uma cópia do método na memória.Desvantagem
this
, os métodos definidos no prototype
não têm acesso direto às variáveis definidas na função construtora. Eles acessam essas variáveis através de this
.<aside>
💡 Geralmente, a prática recomendada é definir métodos no prototype
quando esses métodos não precisam ser redefinidos por instância e para economizar memória.
</aside>