Javascript new 단항 연산자의 객체 인스턴스 생성 프로세스


function create_object(){

    var private_name = 'private';
    this.public_name = 'public';
}


var newObject = new create_object();

alert(newObject.private_name); //undefined
alert(newObject.public_name); //public



1. create_object 함수객체를 선언 및 정의한다.

2. create_object 함수객체안에 지역변수(private_name)와 해당 this의 프로퍼티(this.public_name)를 선언 정의한다.

3. 단항 연산자 new 뒤에 함수객체(create_object)가 오게되면 new는 어떤 객체(this)를 만들어 내부적으로 생성자(create_object)인수(arguments)로 넘겨준다.

- 여기서 생성자(create_object)란?

해당 함수객체(create_object)의 인스턴스를 new 연산자와 함께 구성하는 역활을 담당하기 때문에 기능상 의미로 생성자라 부른다.

create_object는 함수객체 이며 동시에 create_object는 클래스의 생성자 이기도 하다.

4. 첫번째 alert(newObject.private_name)의 결과가 undefined인 이유는 JS엔진은 create_object 클래스의 지역변수(private_name)class의 private와 같은 변수로써 생성자로 만들어진 인스턴스에서 접근할수없다.

5. 두번째 alert(newObject.private_name)의 결과가 'public'인 이유는 해당 지역변수(private_name)와는 다르게 생성자로 만들어진 인스턴스로 인해 접근가능하다.