javascript의 핵심 개념 prototype에 대해서 알아보도록 하겠습니다.
__proto__
constructor 생성자 함수에 new 연산자를 써서 instance를 생성하면 생성자 함수의 prototype이라는 프로퍼티가 instance의 __proto__
에 전달 됩니다.
즉 생성자 함수의 prototype과 인스턴스의 __proto__
는 같은 객체를 참조합니다.
인스턴스의 내부 메소드, 프로퍼티에 접근할 때 __proto__
를 생략할 수 있습니다.
예를들어 const arr = [1, 2, 3, 4];
arr라는 변수를 선언하고 리터럴 방식으로 배열을 할당하였습니다. (리터럴 방식 배열 생성, new Array()
, Array()
모두 동등합니다.)
이때 리터럴로 만들어진 배열의 prototype 객체가 arr 인스턴스의 __proto__
에 전달됩니다.
배열 Array의 prototype 객체 내부에는 흔히 알고있는 filter(), forEach(), map(), push() 등등..
메소드들이 내장되어있습니다.
그래서 배열의 인스턴스 arr에서 다음과 같은 메소드 사용이 가능하게 됩니다.
arr.push(1)
(__proto__
생략)