본문 바로가기

Javascript/prototype & object.create()

prototype 과 __proto__

객체 지향 프로그래밍 안에 prototype을 넣지 않고 따로 카테고리를 생성해서 prototype을 넣은 이유가 있다. 사실 자바스크립트는 객체 지향 언어인 Java, C++과는 다르게 prototype을 이용해서 상속 비슷하게 작동시키는 원리이기 때문이다.

서론이 길었는데 prototype은 javascript에서 함수를 생성했을 때 자동으로 생성되는 원형에 해당하는 객체에 접근하게 해주는 프라퍼티이다. 그리고 new키워드를 이용해 함수로 객체를 생성하게 되면 자바스크립트는 함수.prototype에 있는 내용을 전부 인스턴스화 시키게 된다.

여기서 기억해야할 점은 함수만 prototype을 가진다는 점이다. 함수로 객체를 생성하기 위한 객체원형을 가진다는 뜻이다.

브라우저에서 개발자 툴로 실제로 함수를 아래의 코드와 같이 만들고,

let myFunc = function () {};

myFunc. 하고 찍게되면 자동완성기능으로 prototype을 가지는것을 볼 수 있을것이다.

그럼 여기서 의문이 생길것이다 __proto__는 뭐일까?

__proto__는 간단하게 어떤 객체의 부모가되는 객체의 내용을 가지고 있다. prototype은 함수로 객체를 생성할 때 함수가 가지고 있는 객체원형이고 __proto__는 객체의 부모가되는 객체라고 생각하자. 참고로 함수도 객체이기 때문에 __proto__를 가지고 있다.

모든 객체의 부모는 뭐다? Object이다 !!