Avatar ·

Como funciona .prototype em JavaScript? Explique com exemplos

Olá a todos! Comecei a estudar JavaScript e não consigo entender os protótipos. Li a documentação, assisti vídeos, mas ainda fico confuso.\n\nAqui está um código que tenho:\n\n```javascript\nfunction Animal(name) {\n this.name = name;\n}\n\nAnimal.prototype.sayHi = function() {\n console.log('Olá, eu sou ' + this.name);\n};\n\nlet cat = new Animal('Barsik');\ncat.sayHi(); // "Olá, eu sou Barsik"\n```\n\nEu entendo que `sayHi` aparece em todos os objetos criados com `new Animal`. Mas para que serve `.prototype`? Por que não posso simplesmente adicionar o método diretamente no construtor?\n\n```javascript\nfunction Animal(name) {\n this.name = name;\n this.sayHi = function() {\n console.log('Olá, eu sou ' + this.name);\n };\n}\n```\n\nQual é a diferença? E o que é `__proto__`? Eu vi que às vezes usam