• Javascript Prototype에 대하여 (1)

    Posted Fri 11 2016 View 1065 Comments 0

자바를 하다 왔거나, 다른 언어에서 객체 좀 다뤄봤다는 사람들이 자바스크립트를 처음 접한다면 다음과 같은 코드에 당황할 것이다.

var a = location.href.split("?")[0].indexOf("acemoa").toString()...........

그냥 이 코드를 보고 아 그냥 자바스크립트는 원래 이런거구나 하고 넘어가기엔 너무 찝찝하지 않은가?

저기 저 .붙여가며 메서드 남발하는 모습을 보고 문득 궁금해지지 않는가?

이제 이 비밀을 파해치기 위해 prototype 기반의 객체지향 시스템에 대해 알아보도록 하자.




우리가 아는대로라면 어떤 객체 내에 어떤 메서드가 있을때

어떤객체.어떤메서드(arg)가 가능하다.

그러면 저 어떤객체.어떤메서드(arg)는 어떤 리턴값을 반환하게 될 것이다.

자 그럼 이때 다른객체어떤메서드()를 사용할 수 없을까?

다른객체.어떤메서드(arg)가 되려면 다른객체어떤객체를 상속받아야만 한다.

그렇게 다른 모든 객체들이 어떤객체를 상속받는다면, 어떤메서드는 이때 마치 내장함수처럼 작동하게 된다.

이때 어떤객체가 prototype객체라고 생각하면 된다.

자바스크립트 내에서 모든 문자열은 String객체를 상속받고, 모든 숫자는 Number객체를 자동으로 상속받게 되어있다. (설령 그것이 반환된 값이라도)

그렇기 때문에 아래와 같은 코딩이 가능한 것이다.

// 이와 같은걸 자바스크립트의 메서드체인이라고 한다.
var a = location.href.split("?")[0].indexOf("acemoa").toString()...........




자 그럼 이제 냉큼 F12를 눌러 개발자도구를 열어보자.

그리고 아래와 같은 코드를 적어보자.

console.log("asd".constructor);

콘솔창에 funcion String() {[native code] } 라고 뜨지 않는가?

constructor는 말 뜻 그대로 생성자이다.

분명 우리가 생성한거긴 하지만 실질적으론 저 String객체가 생성했다고 보는 것이다..

( 노발대발 하지 마라 나중엔 고마워 하게 될 것이다. )

이제 콘솔창에

String.prototype;

을 쳐보자.

그럼 객체 하나가 나오는데, 그 안에는 각종 메서드들이 내장되어 있다.

우리가 방금 만든 "asd"는 정확히는 String객체 자체가 아닌, String.prototype을 상속받은 것이다.

문자열이나 어떤 객체가 정확이 무엇을 상속받는지는 굉장히 중요한데,

내용이 길어질 테니 여기까지 하고 다음에 다루기로 한다.

 

크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시-변경금지 2.0 국제 라이선스에 따라 이용할 수 있습니다.

Leave a Comment
Image Login with
댓글 (Your Comment) Save Comments


Comments (0)
Visitors Information
  • TODAY : 1
  • YESTERDAY : 3
  • TOTAL : 2013
Copyright by AceMoa.com All rights reserved. © 2012