JavaScript

[JavaScript]prototype과 __proto__의 차이

hans-j 2024. 8. 8. 23:41

.prototype이 뭐냐:

 

prototype은 함수 객체(특히 생성자 함수)에만 존재하는 속성.

생성자 함수로 객체를 생성할 때, 이 prototype 속성이 그 객체의 프로토타입이 됨.

 


 

.prototype을 왜 쓰냐:

 

prototype은 모든 인스턴스가 공유할 메서드나 속성을 정의하는 데 사용됨.

예를 들어, 생성자 함수로 객체를 여러 개 생성했을 때, 이 객체들은 모두 동일한 prototype 객체를 참조함.

이를 통해 메서드나 속성을 모든 인스턴스에 공유할 수 있음.

 



.prototype 예시:

function Dog(name) {
    this.name = name;
}

Dog.prototype.bark = function() {
    console.log("Woof!");
};

//생성자 함수에 있는 프로토타입 속성

 

const dog1 = new Dog("Buddy");
const dog2 = new Dog("Charlie");

dog1.bark(); // "Woof!"
dog2.bark(); // "Woof!"

//prototype을 통해 `prototype`객체를 참조하여 Dog함수의 속성 공유

 

 

 


 

 

 

 

.__proto__이 뭐냐:

 

 __proto__는 모든 객체에 존재하는 속성으로, 해당 객체가 상속받는 프로토타입


.__proto__을 왜 쓰냐:

 

모든 객체에 존재하는 속성으로, 해당 객체가 상속받는 프로토타입을 가리킴.

즉, __proto__는 객체가 "어디서부터 왔는지"를 나타내는 링크


 

.__proto__예시:

const dog1 = new Dog("Buddy");

console.log(dog1.__proto__ === Dog.prototype); // true
//dog1의 속성이 Dog.prototype에서 부터 왔냐의 의미

 


 

따라서 결론은 뭐냐

 

prototype은 생성자 함수가 새 객체를 만들 때 그 객체들이 공유할 메서드와 속성을 정의하는 데 사용됨

__proto__는 객체가 실제로 상속받고 있는 프로토타입 객체를 가리킴

 

 

프로토타입에 대한 설명은 아래 포스트:

https://hans-j.tistory.com/102

 

[JavaScript/자바스크립트]프로토타입

설명에 앞서, 먼저 간단히 키워드를 기억하고가자.. 프로토타입 = 상속 JavaScript는 흔히 '프로토타입 기반 언어(prototype-based language)' 라 불린다.왜냐???? Javascript에서는 객체를 상속하기 위하여 프

hans-j.tistory.com