[JS/TIL] prototype과 __proto__

김재범·2022년 11월 1일
0
post-thumbnail

프로그래머스 알고리즘을 하면서 시간복잡도에 걸리는 케이스가 너무 많아졌다.
그래서 스터디에서 Map(), Set(), Get()에 대해서 나왔는데, 이것을 활용하기 위해 공부가 필요하다고 생각했다.

map()을 쓰기 위해선

let map = new Map() 
// 이런 식으로 새로운 map을 생성을 먼저해야함

RUN.JS에서 사용해보니 map이 생성되었는데

Map(0){
  __proto__ : {..}
}
// 이런식으로 만들어지고

__proto__를 클릭해보니 이런식으로 나옴

__proto__prototype이라 생각했는데 검색을 해보니 다른 의미였다.

prototype

자바스크립트의 모든 객체는 프로토타입(prototype)이라는 객체를 갖고 있다.
모든 객체는 그들의 프로토타입으로부터 프로퍼티(객체내부의 속성)와 매소드(어떠한 특정 작업을 수행하기 위한 명령문의 집합 / 함수)를 상속받는다.

이처럼 자바스크립트의 모든 객체는 하나 이상의 다른 객체로부터 상속을 받으며, 이 때 상속되는 정보를 제공하는 객체를 프로토타입이라 한다

쉽게 말해서 함수는 객체임

function Person(name, first, second){
  this.name = name;
  this.first = first;
  this.second = second;
// Person이라는 객체가 생성됨
// 근데 객체가 하나 더생김 Person의 prototype이라는 객체가 생김
// Person의 prototype객체도 constructor라는 프로퍼티를 만들어서 상호참조함
  

출처: http://www.tcpschool.com/javascript/js_object_prototype

__proto__

모든 객체는 __proto__를 통해 자신이 물려받은 프로토타입 값에 접근할 수 있다. 즉, __proto__라는 프로퍼티로 다른 연관된 객체의 접근이 가능하다

출처: https://www.youtube.com/watch?time_continue=649&v=wT1Bl5uV27Y&feature=emb_logo


예를 들어,

const str_instance = new String("abc")을 하면,
str_instanceString이라는 부모로부터 낳아진 자식

따라서 __proto__String.prototype이 이미 자동적으로 잘 정의되어진다.

const str_instance = new String("abc");
String.prototype === str_instance.__proto__ //true
String.__proto__ === str_instance.__proto__ // false

참조: https://velog.io/@goggling/Prototype%EA%B3%BC-proto-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B01

profile
지식을 쌓고 있습니다.

0개의 댓글