그 동안 자바스크립트 공부를 하면서 명확하게 잡히지 않았던 것들만 골라 경험담과 함께 시리즈로 정리하려한다. 카페트 밑의 먼지 마냥 급하진 않았지만 거슬리는 기본적 개념, 근본적인 동작의 이해에 대한 갈망을 이번 시리즈로 해결하고자 한다.

자바스크립트는 Object가 알파가 오메가다. 그리고 그 옆에는 프로토타입이 따른다. 그런데 가끔 < — .prototype> 에 메소드를 구현해 인스턴트를 취미에 맞게 쓰거나 메서드와 argument의 위치를 바꾸는 정도로만 쓰는 정도다. 그리고 그 원리에 대해선 __proto__를 타고 chain으로 호출에 반응한다는 정도다. 그 이외에 안에서 벌어지는 일은 내게 흐릿하다. 특히 다이어그램에서 나오는 생성자나 이란 프로퍼티를 보면 더 그렇다. 그리고 자바 스크립트의 많은것들이 함수로 되어 있다는 점은 더 그렇다.

Object는 함수..? 이것을 중심으로 자바스크립트 의 구조를 이해해보자String, Number, Array 내가 자료타입으로 알고 있는건 모두 함수로 나온다.

construct클래스 언어는 상속받은 내용을 각 객체가 다 자기만의 버전으로 들고 있다. 프로토타입 기반 언어는 prototype의 내용을 모든 상속받은 객체들이 공유한다. __proto__ 체인을 통해서 말이다.
String 은 내장객체이므로 이미 구현된 메서드들이 보인다. Person 함수를 통해 String 같은 수준의 객체원형을 만들어 냈다. 아무것도 없고 new 때문에 실행된 constructor만 보인다.

console.dir(Person)Person 함수를 분해해보자<__proto__>가 f() 를 가르키고 있다. 이건 즉 Person은 function 키워드를 받으면서 자신의 조상으로 태초의 함수 f()를 지정받았는 이야기다. 그 증거로 모든 함수가 다 들고 있는 arguments, caller가 보인다.
그리고 눈에 띄는게 바로 < prototype > 프로퍼티다. prototype는 설계도에 해당한다. 설계도인 prototype은 Object를 자신의 조상으로 고백하고 있다. 즉 끝까지가면 다 Object다.

자신의 출생지 신고서자바스크립트에서 constructor는 객체는 뼈와 살을 가르킨다.
Person은 함수였지만 객체지향처럼 사용한다. 어디서 console.dir을 찍든 < __proto__> 로 고백받는, 모든 객체들의 어머니라는 Object가 함수인게 이제는 이해가 간다. 이게 자연스러운거다. 자바스크립트는 모든것이 함수를 형태를 한 최초의 유전자(?) Object의 유지를 이어받은 Object 부족인것이다. 이 부족원들의 직접적인 출생증명은 < prototype > 프로퍼티에 적혀있다. kth의 출생증명서인 prototype 또한 Object 이니 만물이 Object다.

이야기로 다시 풀어보자.

Person의 인스턴스로 태어난 kim. 이름만 가진 홀몸으로 태어나 __proto__ 쪽지 하나만 믿고 쭉쭉 따라가니 Person이라는 prototype(조상)님이 기다리고 계셨다. 조상님도 프로퍼티 하나 없는 청렴한 native 느낌의 객체였지만 중간에 주름시술을 받아서 myjosangnim이란 프로퍼티가 생겼다.

그렇다고 kim이 시술을 받은건 아니였지만 그 소식을 듣고 다시 자신을 조상을 찾아가보니 프로퍼티가 생긴걸 보게된다. 물론 자기는여전히 빈털털이 였지만 조상님의 비밀에 접근하게 된건 쓸만하다.

Updated:

첫 번째 글입니다 가장 최근 글입니다

Leave a comment