JS_prototype_3

dev.dave·2023년 7월 29일

Javascript

목록 보기
98/167

프로토타입>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

함수가 호출을 받아 생성이 되는 시점은,
사실
내부에서 어떻게 동작하냐면,

함수를 호출을 하면,
먼저
함수의 프로토타입이 먼저 생성이 되고 , 그다음 함수 그자체가 생성이 되고 실행이 된다.
즉, 함수는 자기자신의 프로토타입을 보고 만들어진것이다.
그게 함수의 탄생의 과정이다.

그러면 함수의 프로토타입은 뭐로 구성되어져있냐면,

예를 들어

var a = function(){ // 함수 정의
this.a1 = 1; // 함수안에 프로퍼티 정의 했지만 글로벌(window임)영역이죠
a.prototype.a2 = 2; // 프로토타입에 프로퍼티 미리 등록
a.a0 = 0; // a함수의 프로퍼티로 미리 등록
};

a.prototype.a3 = 3; // 프로토타입에 프로퍼티 추가 등록
a.prototype.constructor.a4 = 4; // a함수의 프로퍼티로 추가 등록
a.a5 = 5; // a함수의 프로퍼티로 추가 등록

a(); // 호출하면 함수가 실행됨 ,생성됨 그리고 프로토타입도 생성됨
a.protorype

이렇게 코드가 있을때.....

a.protorype 이라고 콘솔에 치면

a의 프로토타입내용을 볼수 있는데,

{a2: 2, a3: 3, constructor: ƒ}

처음에 이렇게 뜬다

저 내용은 a2 a3 컨스트럭쳐가 들었다는 거고 ,

a2 a3 는 a함수의 프로토타입안에 들어있는 프로퍼티 이고,

컨스트럭쳐는 a함수의 프로퍼티를 의미한다.

그럼 저기옆에 원래 밑으로 볼수있는게 있는데 아무튼 그걸 눌러보면

{a3: 3, a2: 2, constructor: ƒ}
a2: 2
a3: 3
constructor: ƒ ()
proto: Object

요렇게 뜨는데,

보다시피
a2 a3 는 프로토타입에 들어있는 프로퍼티고,

저 컨스트럭쳐를 눌러보면 a함수에 등록된 프로퍼티를 보여준다.

a함수의 프로토타입이랑

a함수랑 다른 별개의 것이다.

a함수의 프로토타입은 a함수의 원형이고,

a함수는 그냥 a함수 그자체이다.

*참고로
a함수의 프로토타입에 속성에 보면 컨스트럭쳐가 있는데

컨스트럭쳐는 생성한다는 의미이다. 즉, 이 컨스트럭쳐를 보고 함수를 만들고(함수도 객체니까) 객체도 만들고 한다.
또 컨스트럭쳐는 생성할 당시, 그 환경을 들고있다. 등록된 프로퍼티도 가지고있고, 추가된 것도 가지고 있다.

근데 만약 이런코드
즉, this 가 들어간 코드는 어떻게 될까?

function a (){
this.a1 = 1;
this.a2 = 2;
}

a();

var b = new a();

b.a1

1
b.a2
2
a.a1 = 4;
4
a.a1
4
b.a1
1

여기서 this 를 쓰게되면,
일단 this를 쓴이유가 뭐냐면,,,

this 는 호출한 객체가 누구냐에 따라 그 대상이 달라지는데,
디폴트로는 window 로 되있는거고,

그래서

new 해서 새로운객체를 생성할때,
this 한거를 갖고오면 마치

a함수가 있는데, 그럼 a함수 프로토타입도 있는데,

저기보면 이미 함수 만들때 this.a1 이라고 프로퍼티를 만들어 놨는데,
일단 저거는

a함수의 프로퍼티라고 생각하면된다

그래서 새 객체를 생성할때 저 퍼로퍼티가 상속이 된다
(참고로 this 로 상속이 되는것은 값이 변경이 안된다.)


profile
🔥개인 메모 / 다른블로그 자료 참조 / 다른블로그 자료 퍼옴 (출처표기) /여기저기서 공부 했던 내용 개인메모 & 참고 / 개인 기록 용도 블로그 입니다.🔥

0개의 댓글