프로토타입 공부하다가 이름이 비슷한 두 개 때문에 계속 헷갈립니다. 생성자 함수에 메서드를 붙이고 인스턴스를 만들어봤어요.


function Dog(name) {
this.name = name;
}
Dog.prototype.bark = function () {
return "woof";
};

const d = new Dog("바둑이");
console.log(d.__proto__ === Dog.prototype);
// true


메서드는 Dog.prototype에 붙였는데, 정작 인스턴스 d에는 prototype이 없고 __proto__라는 게 있더라고요. 그리고 이 둘이 === 로 비교하면 true가 나옵니다.


그러니까 prototype은 함수에 있는 거고 __proto__는 인스턴스에 있는 건가요? 이 둘의 관계와 차이가 정확히 어떻게 되는지 차분히 설명해주시면 감사하겠습니다.