본문 바로가기

JavaScript/Basic-Javascript

자바스크립트 정리하며 배우기[23] - This[2] : 생성자 함수를 호출할 때 this 바인딩

안녕하세요. Tay 입니다.

this 개념의 2번째 이야기입니다. 생성자 함수를 호출할때 this 가 바인딩되는 것을 알아보겠습니다.

 

생성자 함수

자바스크립트의 객체를 생성하는 역할

  • 기존 함수에 new 연산자를 붙여서 호출하면 해당 함수는 생성자 함수로 동작한다.
  • 일반 함수에 new 를 붙이면 생성자 함수처럼 동작할 수 있으므로 주의 해야한다.
  • 자바스크립트 스타일 가이드에서는 생성자 함수의 첫문자는 대문자로 작성하라고 한다.

 

생성자 함수를 호출할 때 this 바인딩

1) index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- <script src="obj_method.js"></script> -->
    <!-- <script src="func.js"></script> -->
    <!-- <script src="inner_func.js"></script> -->
    <script src="new_const.js"></script>
  </body>
</html>

 

2) new_const.js

new 생성자 함수

var Person = function(name) {
  console.log(Person.prototype);
  this.name = name;
};

let kim = new Person("geuntae");

console.log(kim);
  1. Person 생성자 함수를 생성한다.
  2. new Person 으로 kim 객체를 생성한다.

 

먼저 정확한 이해를 위해 생성자 함수 호출 동작 방식을 배워보자.

 

생성자 함수가 동작하는 방식

  • 빈 객체 생성 및 this 바인딩
  1. 생성자 함수 코드가 실행되기 전 빈 객체가 생성된다. (프로토타입은 갖고있다)
  2. 이 객체는 this 로 바인딩 된다.
  3. 이 객체는 자신을 생성한 생성자 함수의 prototype 프로퍼티가 가리키는 객체를 자신의 프로토타입 객체로 설정
    (자바스크립트 규칙이다!)
  • this 를 통한 프로퍼티 생성

  - 위에서 생성된 빈 객체에 동적으로 프로퍼티나 메서드를 생성 할 수 있다.

 

  • 생성된 객체 리턴 - 경우에 따라 동작 방식이 다르다
  1. 리턴 문이 없는 경우 : this 로 바인딩 된 새로 생성한 객체가 리턴된다.
  2. 리턴 값이 있는 경우 : 생성자 함수 호출이라도 해당 객체가 리턴된다.

 

이제 위 예제의 결과를 확인해보자.

 

Github Commit

 

 

결과 :

Person.prototype 과 객체 kim

생성자 함수 Person으로 만든 객체 kim 이 Person.prototype 을 자신의 프로토타입객체로 갖는다.

 

해석 :

 

1번 console log = Person.prototype

2번 console log = kim

 

kim 객체는 생성자 함수에서 새로 생성한 객체가 리턴받았고, 그 객체의 프로토타입 객체는 생성자 함수의 prototype 프로퍼티이다. (누누이 말씀드리는데, 그림 실력 죄송합니다....)

 

 

이 글은 개인 공부목적으로 작성되었습니다.

정보가 잘못 되거나 궁금한 사항은 댓글로 부탁드립니다!! 읽어주셔서 감사합니다.