[객체 vs 오브젝트]
객체: 프로토타입 객체(Class로 정의된 것)
오브젝트: 생성자로 생성된 객체
[prototype vs __proto]
prototype : 원본 객체에만 존재 + 모든 함수에 존재. 상속 받는 상위 객체를 가리킴
__proto__ : 복제된 오브젝트에만 존재. 객체 원본을 가리킴
* prototype이 함수에 존재하는 이유 : 함수는 오브젝트가 존재하지 않음. 항상 원본에 대한 접근만 하기 때문.
* 일반 함수의 prototype은 선언된 원본 함수를 가리키고 생성자는 원본 객체를 가리킨다.
[객체 생성과정과 이해]
1. Class로 객체 선언시 프로토타입 객체가 생성된다(등록된다)
- 모든 프로토타입 객체의 생성자는 일반 함수와 같이 메모리 힙에 등록된다
- 메모리 힙에 프로토타입 객체와 생성자 함수는 각각 등록된다
- 생성자 함수도 일반 함수와 같이 하나의 객체이고 prototype이라는 필드를 갖는다. 이 필드에 프로토타입 객체의 주소가 저장됨
2. 등록된 생성자로 오브젝트를 생성한다
- new + 생성자는 오브젝트를 생성시킨다
- 생성자가 오브젝트를 생성하며 __proto__필드에 원본 객체 주소를 기록한다
3. 생성된 오브젝트는 원본 객체를 가리키게 되며, 명령이나 호출이 왔을때 해당 값이 없으면 참조한 원본 객체에 가서 그 값을 찾는다
=> 특정 속성을 찾을때 상위 프로토타입을 타고 쭉 올라가 스캔 하는데 이를 프로토타입 체이닝이라고 한다.
[JS Core]JavaScript 프로토타입 체이닝(Prototype Link, Prototype Object)
이전 편 JavaScript Core 객체편 JavaScript Core 함수편 이번편은 자바스크립트의 코어 중 코어인 프로토타입에 대한 내용을 다룰 예정입니다. 자바스크립트는 객체지향 언어입니다. 하지만 C++. JAVA, PHP
velog.io
'Knowledge > IT' 카테고리의 다른 글
[IT/개발] DOM(Document Object Model) 이란? (0) | 2021.09.16 |
---|---|
[IT/개발] 데이터바인딩 (Data binding) (0) | 2021.09.06 |
[IT/개발] UI / UX (0) | 2021.07.26 |
[IT/개발] 바인딩(binding) (0) | 2021.07.21 |
git 시작, 기본셋팅, 기본 명령어 (0) | 2021.04.04 |