Blog

javascript 에서의 new 사용

페이스북에 캡슐화 질문 올렸다가 캡슐화랑은 상관없지만 깔끔한 답변을 받아서 공유합니다.

자바스크립트의 new 구문은 매우 특수합니다.
자바의 new처럼 보일지 몰라도 의미가 전혀 다릅니다. 자바에서 new 구문의 의미는 다음과 같습니다.

new 뒤에 지정된 클래스의 인스턴스를 만들고,
해당 클래스에 생성자 함수가 있는 경우 그 함수를 호출한다.
하지만 자바스크립트에서 new는 완전히 다릅니다.

일단 오브젝트를 하나 생성한 뒤
new 뒤에 지정된 함수의 프로토타입을 방금 생성한 오브젝트의 __proto__에 참조로 잡아준다.
그런 후 방금 생성한 오브젝트를 new 뒤의 함수에게 컨텍스트로 전달하여 호출한다.

자바스크립트에서 new 연산자를 통해 수행되는 3단계
//var instance = new move( 10, 10 );

//1번 상황
var instance = {};
//2번 상황
instance.__proto__ = move.prototype;
//3번 상황
move.call( instance, 10, 10 );

1. 생성할 인스턴스변수가 객체로 선언되고,

2. 선언된 객체의 프로토타입이 생성자 함수의 프로토타입을 참조.

3. 마지막으로 생성자 함수를 인스턴스 객체로 바인딩? 해서 해당 멤버및 메소드 사용.

이렇게 정리되겠네요.

  • 철현 박

    2번, 3번 상황 사이에
    instance.constructor = move;
    가 있다면 더 좋을것 같습니다.
    잘 보고 갑니다~