프로토타입

2024. 4. 11. 16:44·Javascript

프로토타입이란?

자바스크립트는 프로토타입 기반 언어입니다.

클래스 기반의 언어에 있는 상속과 다르게 객체 하나를 원형(prototype)으로 삼아 이를 복제하는 방식으로 상속을 흉내냅니다.

  *복제한 객체를 다시 복제해서 사용할 수 있습니다.

이처럼, 상속되는 정보를 제공하는 객체를 ‘프로토타입’이라고 합니다.

프로토타입의 사용

어떤 생성자 함수를 new 키워드와 함께 호출하면 생성자(부모)에서 정의된 내용을 바탕으로 새로운 인스턴스(자녀)가 생성됩니다.

function parent(name, age){
  this._name = name;
  this._age = age;
}
var child = new parent('Kim', 15);
// parent에서 정의된 내용을 child가 그대로 쓸 수 있음
console.log(child._name); // Kim
console.log(child._age); // 15

 

인스턴스가 생성될 때 __proto__라는 프로퍼티가 자동으로 부여됩니다.
이는 생성자의 prototype이라는 프로퍼티를 참조합니다.

  *parent.prototype === child.__proto__입니다.

function parent(name) {
  this._name = name;
}
// 생성자 프로토타입에 메소드를 추가해 보겠습니다.
// 생성자 내에서 this._getName = function () {...}과 달리 prototype에 저장됩니다.
parent.prototype.getName = function () {
  return this._name;
};
var child = new parent("Kim");
// getName 함수는 parent의 prototype에 들어있기 때문에
// child.__proto__.getName으로 호출해야 맞지만, 생략이 가능합니다.
console.log(child.getName()); // Kim

 

prototype 객체 내부의 constructor 프로퍼티

  • 생성자 함수의 prototype 객체에는 constructor라는 자기 자신을 참조하는 프로퍼티가 있습니다.
  • 이것은 인스턴스와의 관계를 나타내기 위한 정보입니다.
    *즉 인스턴스의 원형을 알 수 있습니다.
const array = [1, 2];
// Array 자기 자신을 참조함을 확인합니다.
Array.prototype.constructor === Array; // true
// array의 부모는 Array라는 것을 확인합니다.
array.__proto__.constructor === Array; // true
// __proto__는 생략 가능합니다.
array.constructor === Array; // true

// new Array()를 이렇게도 표현할 수 있겠군요.
const array2 = new array.constructor(3, 4);
console.log(array2); // [3, 4]

 

 

 

 

 

 

 

 

 

 

[참고자료]

[시리즈 - 코어 자바스크립트] 자바스크립트 프로토타입

저작자표시 비영리 변경금지 (새창열림)

'Javascript' 카테고리의 다른 글

번들러  (0) 2024.04.11
프로미스와 Async / await  (0) 2024.04.11
원시 / 참조 타입  (0) 2024.04.11
깊은 복사와 얕은 복사  (0) 2024.04.11
모듈  (0) 2024.04.11
'Javascript' 카테고리의 다른 글
  • 번들러
  • 프로미스와 Async / await
  • 원시 / 참조 타입
  • 깊은 복사와 얕은 복사
URE
URE
Skill: Javascript, ReactJS, Next.js, React Native ... *블로그 이전 작업(24. 04. 11 ~ 24. 04. 15)
  • URE
    Dev++
    URE
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Browser (6)
      • OS (1)
      • Javascript (14)
      • React (19)
      • Next.js (4)
      • React Native (0)
      • Architecture (1)
      • Network (3)
      • 스크랩 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    URL
    상태관리라이브러리
    react18
    javascript
    리덕스
    JS
    리액트
    참조타입
    TCP
    Port
    react concurrent
    자바스크립트
    원시타입
    swr
    Redux
    IP
    브라우저
    리액트 코어
    dataFetching
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
URE
프로토타입
상단으로

티스토리툴바