티스토리 뷰

자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다. 그래서 상속 개념처럼 부모 객체의 프로퍼티나 메소드를 상속받아 사용할 수 있다. 

 

즉,  부모 역할을 하는 객체를 prototyp(프로토타입)객체 또는 prototpe(프로토타입)이라고 한다.

 

let person = {
  name : "kate",
  age : 20
 }
 // person 객체에는 hasOwnProperty 메소드가 없지만 작동한다.
 console.log(person.hasOwnProperty('name')); //true

// person 객체의 부모 객체를 찾아보자
console.dir(person)

# 파란색 네모 부분 : parent 객체의 프로토타입

 

ECMAScript spec에서는 자바스크립트의 모든 객체는 [[Prototype]]이라는 인터널 슬롯(internal slot)를 가진다. [[Prototype]]의 값은 null 또는 객체이며 상속을 구현하는데 사용된다. [[Prototype]] 객체의 데이터 프로퍼티는 get 액세스를 위해 상속되어 자식 객체의 프로퍼티처럼 사용할 수 있다. 하지만 set 액세스는 허용되지 않는다. 라고 되어있다.

[[Prototype]]의 값은 Prototype(프로토타입) 객체이며 __proto__ accessor property로 접근할 수 있다.
__proto__ 프로퍼티에 접근하면 내부적으로 Object.getPrototypeOf가 호출되어 프로토타입 객체를 반환한다.

student 객체는 __proto__ 프로퍼티로 자신의 부모 객체(프로토타입 객체)인 Object.prototype을 가리키고 있다.

 

즉,  자바스크립트의 객체의 부모 객체인 프로토타입 객체를 가지고 있다. 

 

자바스크립트의 객체의 프로토타입 객체를 접근할 수 있을까? 있다! __proto__ 접근가능하다.

 

그리고 __proto__ 접근하면 프로토타입 객체 반환한다. 그리고 부모 객체(프로토타입 객체)Object.prototype을 가리킨다.

 

객체는 생성할 때 부모객체(프로토타입)이 결정되지만, 프로토타입 객체를 다른 객체로 변경할 수 있다. 이러한 특징을 이용해 객체의 상속을 구현할 수 있다. 그래서 자바스크립트는 프로토타입 기반으로 상속을 구한다!

 

 


생성자 함수란?

 

자바스크립트에서 객체를 생성하는 방법 중에 자바스크립트 엔진에 내장객체 생성자 함수를 통해서 먼저 아래와 같이 선언을 해야한다.

 

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.introdue = function() {
    console.log(`안녕하세요. 저는 ${this.name}입니다. 나이는 ${this.age}입니다.`);  
 }  
}

// 자바스크립트 엔진에 내장된 생성자 함수를 통해 인스턴스의 객체 만들기

let newPerson = new Person("kate",20);
newPerson.introduce();

객체 생성자 함수 선언은 function 키워드를 사용하고, 함수명은 대문자로 사용해야 합니다. 그리고 this를 를 이용해 속성과 메소드를 작성합니다.

 

객체 생성자 함수로 인스턴스의 객체를 생성하기 위해서는 new 키워드를 사용합니다.

 

생성자 함수 vs Object.prototype

 

function Person(name, age) {
  this.name = name;
  this.age = age;
  }  
}

Person.prototype.introdue = function() {
    console.log(`안녕하세요. 저는 ${this.name}입니다. 나이는 ${this.age}입니다.`);  
}

let newPerson = new Person("kate",20);
newPerson.introduce();

 

생성자 함수를 이용해 인스턴스의 객체가 생성될 때 마다 메서드가 생성됩니다. 부모 객체(프로토타입 객체)에 메소드를 등록하면 모든 객체가 같은 메소드 공유/참조하게 됩니다. 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함