prototype?
코드스쿼드애서 프로토타입이라는 키워드가 주워졌다. 평소에 prototype이 체이닝이 된다는 사실은 알고 있었는데 여러가지 프로토타입 키워드가 주어지는 상황에서 각각의 prototype을 설명해보겠다. 오늘의 키워드는 아래에 있는 것들이다.
prototype object
__proto__
prototype link
prototype property
함수의 생성
함수는 생성될떄 두가지 일을 한다.
- 우선 만든 함수에 생성자 자격이 주어진다.
- prototype object 를 생성해 두 사이간의 연결한다. 이때 함수에는 prototype property (흔히 말하는 자바스크립트의 키)를 생성하고 prototype object 에는 constructor property 를 생성해 생성자 함수를 가르키게 된다.
- 함수에 prototype link는 Function prototype link를 가르키게 되고, prototype object의 prototype link는 Object prototype link 를 가르키게 된다.
아래는 생성자 함수를 만들어서 내부에 있는 프로퍼티들을 확인해 본 것이다.
const Person = function(name) {
this.name = name
}
console.dir(Person)
console.dir(Person.prototype)
.
모든 객체는 함수를 통해 만들어진다.
지난번 포스팅에서 new
키워드를 가지고 포스팅을 했었다. new
키워드는 뒤에 오는 생성자 함수를 기반으로 새로운 객체 인스턴스를 생성한다. 우리가 말하는 객체, 즉 사용자 정의 객체는 모두 함수를 통해 만들어 진다.
var obj = {}
키워드도 내부적으로는
var obj = new Object()
Object
생성자 함수를 통해 만들어 진다.
사용자 정의 객체의 프로토타입
위애 내용중 함수의 생성이 있었다. 위 과정이 끝난 이후에 만들어진 생성자 함수로 새로운 객체를 만드는 과정에서의 prototype의 변화에 대해서 알아보자.
우선 함수의 생성까지의 그림이다.
let foo = new Person("foo")
한마디로 이 그림을 정의할 수 있다.
"모든 객체의 prototype link(__proto__) 는 자신을 만든 생성자함수의 prototype property가 가르키고 있는 prototype object를 가르킨다."
오승환 미디엄에 이해에 좋은 사진이 있어 첨부하였다.
const Person = function(name) {
this.name = name
}
let foo = new Person("foo")
console.dir(Person)
console.dir(foo)
느낀점
prototype에 관한 지식이 혼용되는 경우가 많았는데 이번 기회에 조금이나마 개념을 확립할 수 있어서 좋았던 것 같다.
참고 사이트
[참고 서적] 인사이드 자바스크립트
https://medium.com/@bluesh55/javascript-prototype-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-f8e67c286b67
'Study > Today I Learn' 카테고리의 다른 글
[개념잡기] HTTP 기본 개념 (1) | 2019.05.24 |
---|---|
[TIL] 2019.04.23 - new operator (0) | 2019.04.23 |
[TIL] 2019.04.23 - git 키워드 정리 (0) | 2019.04.23 |
[TIL] 2019.04.22 - 객체지향프로그램 (0) | 2019.04.22 |
[TIL] 2019.04.20 - Computer Science (0) | 2019.04.20 |