개발 공부는 어려워
Published 2021. 7. 7. 14:01
JavaScript_Prototype study/js
반응형

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
profile

개발 공부는 어려워

@신입개발자하랑이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!