.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` 是如何工作的?