[객체 vs 오브젝트]

객체: 프로토타입 객체(Class로 정의된 것)

오브젝트: 생성자로 생성된 객체

 

[prototype vs __proto]

prototype : 원본 객체에만 존재 + 모든 함수에 존재. 상속 받는 상위 객체를 가리킴

__proto__ : 복제된 오브젝트에만 존재. 객체 원본을 가리킴 

 

* prototype이 함수에 존재하는 이유 : 함수는 오브젝트가 존재하지 않음. 항상 원본에 대한 접근만 하기 때문.

* 일반 함수의 prototype은 선언된 원본 함수를 가리키고 생성자는 원본 객체를 가리킨다.

 

[객체 생성과정과 이해]

1. Class로 객체 선언시 프로토타입 객체가 생성된다(등록된다)

     - 모든 프로토타입 객체의 생성자는 일반 함수와 같이 메모리 힙에 등록된다

     - 메모리 힙에 프로토타입 객체와 생성자 함수는 각각 등록된다

     - 생성자 함수도 일반 함수와 같이 하나의 객체이고 prototype이라는 필드를 갖는다. 이 필드에 프로토타입 객체의 주소가 저장됨

 

2. 등록된 생성자로 오브젝트를 생성한다

     - new + 생성자는 오브젝트를 생성시킨다

     - 생성자가 오브젝트를 생성하며 __proto__필드에 원본 객체 주소를 기록한다

 

3. 생성된 오브젝트는 원본 객체를 가리키게 되며, 명령이나 호출이 왔을때 해당 값이 없으면 참조한 원본 객체에 가서 그 값을 찾는다

     => 특정 속성을 찾을때 상위 프로토타입을 타고 쭉 올라가 스캔 하는데 이를 프로토타입 체이닝이라고 한다.

 

 

 

 

https://velog.io/@sik2/JS-CoreJavaScript-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85-%EC%B2%B4%EC%9D%B4%EB%8B%9DPrototype-Link-Prototype-Object

 

[JS Core]JavaScript 프로토타입 체이닝(Prototype Link, Prototype Object)

이전 편 JavaScript Core 객체편 JavaScript Core 함수편 이번편은 자바스크립트의 코어 중 코어인 프로토타입에 대한 내용을 다룰 예정입니다. 자바스크립트는 객체지향 언어입니다. 하지만 C++. JAVA, PHP

velog.io