일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 백트래킹
- 함수 객체의 프로퍼티
- 프로그래밍
- 한글이 두 번 입력됨
- 비동기
- css
- 동적 계획법
- Tanstack Query
- 시간
- float: right
- python
- 알고리즘
- 낙관적 업데이트
- C++
- 유클리드 호제법
- prototype 프로퍼티
- 동기
- 백준 9610번 파이썬 문제 풀이
- 파이썬
- 자바스크립트
- 최소공배수
- 한글 입력 시 이벤트 두 번 발생
- __proto__ 접근자 프로퍼티
- 백준
- backtracking
- javascript
- 9610
- 2522
- dp
- 메타버스
- Today
- Total
염딩코
[JS] Prototype 본문
Prototype은 뭘까?
오늘은 prototype에 대해서 공부해봅시다!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/009.gif)
Prototype에 대해서 공부하기 전에 JavaScript에서 class에 대한 내용을 잠시 설명하고 가겠습니다.
아래의 코드를 보시면 기계라는 것을 통해서 object를 마음껏 찍어낼 수 있습니다.
비슷한 object를 쉽게 만들고 싶을 때, 아래와 같은 문법을 사용할 수 있습니다.
// object 복사 기계(부모)
function 기계() {
// 복사된 object가 기본으로 가질 속성
this.q = 'strike';
this.w = 'snowball';
}
// object 생성(자식)
var nunu = new 기계();
console.log(nunu); // { q: "strike", w: "snowball" }
부모가 자식을 생산하는 느낌으로 비유하기도 합니다.
자식에게 q, w 속성을 물려줍니다.
자바스크립트에서는 이와 같이 물려주는 것을 또 다른 방법으로 구현할 수 있습니다.
바로 Prototype입니다.
Prototype을 사용해도 자식 object에게 데이터를 물려줄 수 있습니다.
기계.prototype을 콘솔창에서 확인해봅시다!
prototype은 유전자
유전자는 마음대로 수정할 수 있습니다.
Prototype({object} 자료임)에 뭔가 추가하면,
`기계`로 부터 생성된 자식들은 전부 사용할 수 있습니다.
자식에게 직접 name을 부여한 적이 없습니다.
그런데, 부모 유전자에 기록이 되어 있으면 그것을 가져다가 사용할 수 있습니다.
이것이 prototype의 역할이라고 생각하시면 됩니다.
이렇게 nunu를 출력해도 name은 찾아볼 수 없지만,
부모가 가지고 있으면, 부모의 '유전자'에 이것이 기록이 되어 있습니다.
그것을 끌어와서 사용할 수 있습니다.
그래서 prototype은 상속 기능을 부여하는 장치라고 생각하시면 됩니다.
그렇다면 어떤 속성을 물려받아서 사용하고 싶을 때, 방법은 2가지가 되겠습니다.
1. function 기계()에 직접 추가하기
-> 자식이 직접 가짐.
2. prototype을 사용해서 추가하기
-> 부모만 { name: 'Yeom' }을 가짐.
원리
부모 유전자에 있는 것을 자식이 사용가능한 이유는 뭘까?
컴퓨터가 계속 뒤지기 때문입니다.
<object에서 자료뽑을 때 일어나는 일>
- 직접 자료를 가지고 있으면 그거 출력
- 없으면 부모 유전자까지 뒤짐.
- 없으면 부모의 부모 유전자까지 뒤짐. ... 끊임없이 물어봄
= Prototype chain
다음을 한 번 생각해봅시다.
// 인간의 방식
var arr = [4,2,1];
// 컴퓨터의 방식
var arr2 = new Array(4,2,1);
arr.sort();
array 자료에 .sort(), length 등을 붙일 수 있는 이유가 뭘까요?
저희는 .sort() 라는 것을 추가해준 적이 없습니다.
.sort(), .length 등이 모두 부모 유전자에 기록이 되어 있기 때문에 가져다가 사용할 수 있는 것입니다.
실제로 확인해보면 정말 많은 것들이 있는 것을 알 수 있습니다.
왜 이렇게 표기를 했는지도 이해할 수 있습니다.
모든 array 자료에서 쓸 수 있는 함수를 추가하고 싶다면?
Array.prototype.함수 = function(){};
'Front-End > Javascript' 카테고리의 다른 글
[JS] Property Attribute (0) | 2023.08.05 |
---|---|
[JS] Event loop (0) | 2023.08.03 |
[JS]let, const 키워드와 블록 레벨 스코프 (0) | 2023.07.29 |
[JS]전역 변수의 문제점 (0) | 2023.07.29 |
[JS] 블로킹과 논블로킹 / 동기와 비동기 (0) | 2023.07.27 |