자바스크립트를 공부하다보면 꼭 한번씩은 듣는 '프로토타입'이라는 개념
자바스크립트에서 함수를 선언하면 해당함수의 프로토타입도 같이 생성된다.
예를 들면 test 라는 함수를 선언하면 test함수의 프로토타입도 아래와 같이 생성된다.
그걸 통해서 객체도 생성하고 어쩌구저쩌구하는데 아래의 링크를 참고하시길.
(아래의 링크에 정말 설명을 잘해 놓았다. 꼭보길...)
https://medium.com/@bluesh55/javascript-prototype-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-f8e67c286b67
[Javascript ] 프로토타입 이해하기
자바스크립트는 프로토타입 기반 언어라고 불립니다. 자바스크립트 개발을 하면 빠질 수 없는 것이 프로토타입인데요. 프로토타입이 거의 자바스크립트 그 자체이기때문에 이해하는 것이 어렵고 개념도 복잡합니다.
medium.com
그 중에서도 핵심은 prototype 속성과 __proto__ 속성이다.
- prototype 속성: 함수만 가지고 있는 속성으로, 함수선언시 함께 생성되는 프로토타입 객체를 가리킨다.
- __proto__속성: 모든 객체가 빠짐없이 가지고 있는 속성으로, 객체가 생성될 때 조상이었던 함수의 프로토타입 객체를 가리킨다. ('던더 프로토'라고 발음하는것 같다. 던더[dunder; 더블-언더스코어 준말])
해당 부분을 공부하면서 "아~그렇구나.."하다가 문득 든 생각.
"자바스크립트에서는 함수(Function)도 객체(Object)다." 라는 말을 들어봤던것이 생각났다.
그럼 함수들은 prototype속성과 __proto__속성을 둘다 갖고있지 않을까? 생각했다.
헐..역시나 있더라.
그럼 저 함수의 __proto__속성은 무엇을 가르키고 있을까? 하는 생각이 들었다.
함수니깐 Function이라는 함수의 프로토타입이지 않을까?
맞네...? 당연한걸지 모르겠지만 난 신기했다..
계속 이것 저것 처보던중 우리가 객체를 생성[예를 들면 var temp = new Object();] 할때 쓰는 Object함수도 함수니깐 Function함수의 프로토타입과 무슨 관계가 있겠지? 하는 생각을 가지고 막 장난쳐보니 아래와 같은 재밌는 결과가 나왔다.
위와같이 객체의 부모-> 그 객체의 부모 -> 그객체의 부모를 찾다보면 결국 Object 프로토타입이 나오고,
함수의 부모를 찾다보면 결국 Function 프로토타입이 나온다...(Function함수도 부모를 찾으면 결국 자기 자신의 프로토타입이 나옴)
위와 같은 결과로 알수있는것은 모든 함수는 Function 프로토타입 객체를 통해 생성되었고, 모든 객체는 Object 프로토타입 객체를 통해 생성 되었다.
그런데 모든 함수의 부모인 Function 프로토타입객체 마저도 그 부모가 Object 프로토타입 객체였다.
결국 Object.prototype이 최상위 객체였다!!!!!!!!!!
'게으른개발자 > 공부' 카테고리의 다른 글
git fetch와 pull의 차이 (0) | 2019.07.25 |
---|---|
ES6 화살표 함수 (0) | 2019.04.19 |
리눅스 alias 설정 (0) | 2019.02.27 |
javascript hoisting 이란 (0) | 2019.01.20 |
스프링부트 프로파일 (0) | 2019.01.13 |