프로그래머스 알고리즘을 하면서 시간복잡도에 걸리는 케이스가 너무 많아졌다.
그래서 스터디에서 Map(), Set(), Get()에 대해서 나왔는데, 이것을 활용하기 위해 공부가 필요하다고 생각했다.
map()을 쓰기 위해선
let map = new Map()
// 이런 식으로 새로운 map을 생성을 먼저해야함
RUN.JS에서 사용해보니 map이 생성되었는데
Map(0){
__proto__ : {..}
}
// 이런식으로 만들어지고
__proto__
를 클릭해보니 이런식으로 나옴
__proto__
가 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_instance
는 String
이라는 부모로부터 낳아진 자식
따라서 __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