본문 바로가기
Programming/JavaScript

자바스크립트에서 함수를 new 연산자를 이용하여 인스턴스 생성

by ★용호★ 2016. 4. 6.

new 키워드를 사용하여 함수를 호출 시 동작 과정.

  1. 빈 객체 인스턴스가 생성

  2. 생성자 함수에 빈 객체 인스턴스가 this로 전달

  3. 생성자 함수는 this 객체에 skulk 라는 프로퍼티를 생성하고 함수를 할당한다

  4. 결국 새로 생성된 객체는 skulk 프로퍼티를 갖게 된다.


일반적으로 자바와 같은 객체지향 언어를 사용했던 관점에서 보면 new Ninja를 수행하면 Ninja라는 인스턴스가 생성될 것 같은데 빈 객체가 생성된다는 것이 헷갈리는 부분이었다. 빈 객체 안에 생성자를 통해 반환 될 this가 전달되고 이 this에 함수 안에서 일어나는 대입 연산에 대한 부분이 프로퍼티로 생성된다는 점이 특이하고도 혼란스럽게 느껴졌다.


그렇게해서 반환된 이 this가 ninja라는 변수에 대입되어 자바에서의 객체 처럼 사용할 수 있는 것이다. new를 사용하지 않고 그냥  Ninja()를 호출하면 여기서의 this는 글로벌 객체인 window가 된다. 그러므로 함수를 호출하는 것만으로 window에 skulk 프로퍼티가 생성되어 this.skulk()로 사용할 수가 있다.



참고 : 자바스크립트 닌자 비급

댓글