1. [Prototype] 1. JavaScript의 특징 - 객체지향 언어 - OOP로 분류되지만 Class 개념이 존재하지 않는다. - 프로토타입 기반 언어 (Class 대신 사용) # class 비슷하게 만들어보기
<javascript />
function Person(){
this.name = "KJH";
this.age = 27;
}
var kim = new Person(); // Person 변수 가져오기
var park = new Person();
console.log(kim.name); // KJH
console.log(kim.age); // 27
console.log(park.name); // KJH
console.log(park.age); // 27
# 이렇게 만든 kim, park 객체는 name과 age를 공통적으로 가지게 되며 메모리에 총 4개의 변수가 할당된다.
# 이러한 문제를 프로토타입으로 해결할 수 있다.
<javascript />
function Person() {}
Person.prototype.name = "KJH";
Person.prototype.age = 27;
var kim = new Person();
var park = new Person();
console.log(kim.name); //"KJH"
** 내용정리 **
<new로 생성하게되면 메모리에 kim과 park이 Person이 가지고 있는 변수를 각각 새로 생성하여 메모리가 많이 사용되지만 Person.protorype으로 Person의 변수를 선언하면 Person.prototype이라는 빈 Object가 어딘가에 존재하고,
Person 함수로부터 생성된 객체(kim, park)들은 어딘가에 존재하는 Object에 들어있는 값을 가져다 쓰는 것이다.>
2. Prototype Link / Prototype Object
- Prototype = Prototype Link + Prototype Object
- Prototype Object : 객체는 언제나 함수로 생성된다
* function "함수이름"() {} //함수
var personObject = new Person(); // 함수로 객체를 생성
- 함수가 Constructor 자격이 부여되면 new를 통하여 객체를 만들 수 있다.
* 함수를 정의하면 함수 + Prototpe Object도 같이 생성된다.
* 생성된 함수는 prototype이라는 속성을 통하여 Prototype Object에 접근할 수 있으며
constructor와 _proto_(Prototype Link)를 가지고 있다.
- 새로만든 변수를 new Person() 을해서 참조하면 _proto_에 의하여 Person이 가지고 있는 변수를 사용할 수 있다,.
_proto_는 모든 객체가 가지고 있기 때문에 새로만든 변수에 _proto_가 생성될 때 원래 조상이었던 Person의 Prototype Object를 참조하고 있으므로
새로반든 변수도 Person의 변수를 사용할 수 있다.
* 새로만든 객체가 Person의 변수를 찾을 때까지 계속 탐색하는데 최상이 Object의 Prototype Object까지 도달했는데 못 찾았을 경우 undefined를 리턴한다.
* 이렇게 -proto- 속성을 통하여 상위 프로토타입과 연결되어 잇는 형태를 프로토타입 체인이라고 한다
- 체인 구조 덜분에 모든 객체는 Object의 자식이라고 불리고, Object Prototype Object에 있는 모든 속성을 사용할 수 있다.
'study > js' 카테고리의 다른 글
JavaScript#2 타입 (0) | 2021.07.09 |
---|---|
JavaScript#1 소개 (0) | 2021.07.08 |
JavaScript_동기와 비동기 (0) | 2021.07.07 |
JavaScript_반복문 (for in, for of, forEach) (0) | 2021.07.06 |
JavaScript_자료형 (0) | 2021.07.06 |