자바스크립트의 proto타입에 대해서
1
2
3
|
let elemeent = {lastname : "manho"};
elemeent.prototype.nowname = "minjae";
console.log(element.nowname)
|
cs |
위 결과는 어떻게 나올거라고 생각하는가?
결과는 이렇다...
TypeError가 나오면서 nowname이라는 property가 없다고 나온다.
Prototype의 종류에는 Prototype Object 와 Prototype Link가 있다.
그럼 이둘이 무엇인지 살펴보도록 하자..
Prototype Object
설명하기에 앞서 어떤것이 객체인지 알 필요성이 있다.
1
2
3
4
|
let object = function() { }
console.log(object);
let newObject = new object();
console.log(newObject);
|
cs |
new 객체로 생성했을떄
_proto_타입이 붙어서 나오는 것을 볼수가 있다.
그리고 객체라고 말하는 {}이것!!!..
{}은 뭐지 라고 생각하는 사람들이 있을것이다.... 콘솔에 찍어보자.
이런 결과가 나온다... 그렇다면 {}이 의미하는 것은???
new Object()과 같다
Array 같은 경우도 마찬가지다. [] 이라고 표현하기도 하지만 new Array()와 동일하므로 _proto_가 찍혀나온다.
확실한 증명자료를 다음과 같이 첨부한다..
보이는가 다 결국 객체타입인 것이다 . 그리고 그 객체엔 _proto_가 딸려온다.
그렇다면 이제 prototype object에 대해서 설명을 해보겠다.
linkedList를 함수로 생성한다음에 newList로 다시 new 라는 객체로 가져와서 생성했다.
value , next 라는 값이 함수로 생성할떄 있엇던 것을 그대로 들고 온다 .
이게 바로 prototype object 이다.
그렇다면? protoype link는 무엇일까?..
link.... 링크 ..연결....연결되어있다????!!!!
proto 앞의 이것을 클릭해보면 .... ▶
constructor가 있고 그밑에 또 _proto_라는 것으로 연결되어 있다.
constructor는 말 그대로 생성자 이다.
말그대로 링크되어 연결되어있다는 것
linkedList.prototype.x = 원시함수 , 래퍼런스 함수로 표현가능.
linkedList로 생성되는 모든 것들에 대한 prototype link에 추가한다는 것이다.
그리고 주의할점이 하나 더 있다면 . 상위 부모에서 같은 프로퍼티로 추가가 되어있다면..
부모가 먼저라는 것이다. 하지만 없다면 자식중에 제일 가까운 값을 표시한다.
'프로그래밍 언어 > javascript' 카테고리의 다른 글
[javascript] scope 문제... (0) | 2020.01.03 |
---|---|
Object.create()에 대해서..... (0) | 2020.01.03 |
toBe vs toEqual vs == vs === (0) | 2019.12.25 |
array.sort()에 대해서... (0) | 2019.10.22 |
JSON과 관련된 메소드 정리... (0) | 2019.10.22 |