Avatar ·

.prototype 在 JavaScript 中是如何工作的?请用示例解释

大家好!我开始学习 JavaScript,但一直搞不懂原型。我读过文档、看过视频,但还是会混淆。 我有这样一段代码: ```javascript function Animal(name) { this.name = name; } Animal.prototype.sayHi = function() { console.log('Привет, я ' + this.name); }; let cat = new Animal('Барсик'); cat.sayHi(); // "Привет, я Барсик" ``` 我明白 `sayHi` 会出现在所有通过 `new Animal` 创建的对象上。但为什么需要 `.prototype`?为什么不能直接把方法添加到构造函数中? ```javascript function Animal(name) { this.name = name; this.sayHi = function() { console.log('Привет, я ' + this.name); }; } ``` 有什么区别?还有 `__proto__` 是什么?我看到有时用它,有时用 `.prototype`。它们是同一个东西吗? 另外,原型链也让我困惑。当我写 `cat.toString()` 时,这个方法是从哪里来的,如果我没有定义它?还有 `Object.create` 是如何工作的?