프로토타입

Rosevillage·2023년 2월 16일
0

자바스크립트의 프로토타입에 대해 정리한다.

프로토타입 (Prototype)

자바스크립트는 프로토타입 기반 언어 라고 불린다. 이는 모든 객체들이 메서드와 속성들을 상속받기 위한 템플릿으로써 프로토타입객체를 가진다는 의미이다.

이러한 프로토타입 객체는 상위 프로토타입 객체로부터 메서드와 속성을 받을 수 있고, 인스턴스 객체는 프로토타입 객체로부터 메서드와 속성을 받을 수 있다. 이러한 연속성을 프로토타입 체인이라고 부른다.

생성자의 프로토타입 객체에 있는 메서드를 인스턴스 객체에서 호출하면 다음과 같은 일이 생겨난다.

  • 브라우저는 우선적으로 인스턴스 객체에 해당 메서드가 있는지 확인한다.

  • 메서드가 없다면 proto의 참조를 통해 프로토타입 객체에 접근해 메서드가 있는지 확인한다.

  • 여전히 없다면 생성자의 프로토타입 객체의 프로토타입 객체(Object.prototype : 자바스크립트의 모든 객체의 부모 프로토타입 객체)가 메서드가 있는지 확인하고 있다면 검색을 종료하고, 메서드를 실행시킨다.

프로토타입 속성

생성자의 프로토타입 속성이자 객체는 인스턴스 객체들의 참조의 목표가 된다. 자식 객체가 부모 객체에서 가져올 것들이 프로토타입 속성에 모여있다는 뜻이 된다.
여러 자료 타입의 메서드 중에서 우리가 생성한 변수에 사용할 수 있는 변수들은 prototype. 으로 시작하는 모습을 보인다.
이는 상속받을 수 있는 메서드들이 프로토타입 속성에 답겨져 있다는 것을 의미한다.

Constructor 속성

모든 생성자 함수의 프로토타입 객체는 constructor라는 속성을 지닌다 . 그리고 constructor는 자신을 생성하는 생성자 함수를 가리킨다.

프로토타입 수정

프로토타입은 수정 가능한 객체의 특성을 지닌다. 이는 우리가 객체의 속성을 추가하거나 수정하는 것 같이 프로토타입의 속성을 수정할 수 있다는 것이다.

Object.prototype.print = function() {console.log('hi')};

let obj = {}
obj.print() // 'hi'

결론

모든 생성자는 프로토타입이라는 속성이자 수정가능한객체를 지닌다.
인스턴스객체는 proto라는 속성을 가지며 이 속성은 프로토타입 객체를 참조한다.
프로토타입의 특성과 프로토타입 체인을 통해 우리는 객체나 클래스가 상속하는 것과 같은 기능을 사용할 수있다.
프로토타입의 constructor는 객체를 생성한 생성자 함수를 가리킨다.


참고 사이트

웹 개발 학습하기|MDN-Object prototypes

0개의 댓글