상세 컨텐츠

본문 제목

[JavaScript]함수와 프로토타입 체이닝(5)

개발공부/JavaScript

by 임우찬 2019. 9. 11. 10:51

본문

 

* 프로토타입 객체도 객체이다.

- 프로토타입 객체도 프로퍼티 추가 삭제가 가능하다.

이 말은 다시말해, 실시간으로 프로토타입 체이닝이 반영된다는 것이다.


11. 프로토타입 메서드와 this 바인딩

- 프로토타입 객체가 가지는 메서드 : "프로토타입 메서드" 라고 부른다.

- 객체의 메서드를 호출할 때 this바인딩과 동일하다.

-> * 객체의 메서드를 호출할 때 this 바인딩(앞 내용 다시)

- 해당 메서드를 '호출'한 객체로 바인딩된다. (프로토타입 메서드도 동일하다는 말이다.)

ex)

생성자 함수 생성 -> (자동으로)프로토타입 객체 생성 -> 객체 'A' 생성

-> 프로토타입 객체에 메서드('this가 있음.') 추가.

- > A객체에서 방금만든 메서드를 호출할 경우 this는 A에 바인딩되고, 프로토타입 체이닝을 통해 호출된다.

(생성자 함수에 없기 때문.)

- > 프로토타입 객체에서 호출 시 this는 프로토타입 객체로 바인딩된다.

11-(1). 디폴트 프로토타입은 다른 객체로 변경 가능하다.

- 디폴트 프로토타입 객체: 함수가 생성될 때 같이 생성되고, 함수의 prototype프로퍼티에 연결한다.

(생성자 함수가 생겨날 때 같이 생성되는 prototype객체를 말하는 것이다.)

- JS에서는 디폴트 프로토타입 객체를 다른 일반 객체로 변형하는 것이 가능하다.

- 생성자 함수의 프로토타입 객체가 변경되면, 변경된 시점 이후에 생성된 객체들은 변경된 프로토타입 객체로 [[Prototype]]링크를 연결한다.

- 이에 반해 생성자 함수의 프로토타입이 변경되기 이전에 생성된 객체들은 기존 프로토타입이 변경되기 이전에 생성된 객체들은 기존 프로토타입 객체로의 [[Prototype]] 링크를 그대로 유지한다.

ex)

예시 코드이다.

위 코드에 대한 결과이다.

위 코드의 사진설명이다.

- 위 코드를 설명한 그림에서 보이듯, 변경한 프로토타입 객체는 constructor 프로퍼티가 없다.

여기서 프로토타입 체이닝이 일어나게 되고, 변경한 Person.prototype.constructor는

Object()가 되게 되는 것이다.

- 여기서 꼭 기억해야 할 것은,

객체의 프로퍼티를 읽거나 메서드를 실행할 때만 프로토타입 체이닝이 동작한다는 것이다.

관련글 더보기

댓글 영역