sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | http://1 |
extra_vars4 | ko |
extra_vars5 | 자바 스크립트 for 웹2.0 - 오레일리 |
extra_vars6 | sitelink1 |
1. Object
자바스크립트 객체는 일반적으로 하나의 생성자와 여러 개의 메소드/프로퍼티로 구성된다.
또한 Object라는 자바스크립트 표준 객체로부터 여러 가지 기능을 상속받는다.
Object 자체로는 그다지 흥미롭지 않다. 메소드들은 객체 내의 메소드로 사용되기보다는 점차
전역 함수로 사용되게 되었다. 이러한 것들로 eval이 있다.
Object는 새로운 객체를 생성할 때 프레임워크를 제공한다. 그러나 기존 객체지향 언어에서 제공하는
상속과 클래스의 개념을 통해서 하는 대신 프로토타입이라는 개념을 통해서 객체지향과 유사한 기능을 제공한다.
2. Prototype
일반적인 객체지향 프로그래밍에서는 기존의 클래스를 확장하여 새로운 클래스를 만들면 기존 클래스로부터 상속을 받는다.
그리고 나서 상속받은 기능을 재정의하거나 고유의 기능을 추가하는 수순을 밟는다.
반면에 자바스크립트에서는 Object 생성자를 이용해서 새로운 객체를 만든다. 따라서 새로운 객체와 그 프로퍼티에 메모리를
할당하는 것은 Object 생성자이다.
Object는 prototype프로퍼티도 제공한다. 이를 사용해서 String과 Number 같은 내장 객체는 물론이고 모든 객체를 확장할 수 있다.
즉, 클래스 상속이 아닌 프로토타입을 이용해서 새로운 객체의 메소드와 프로퍼티를 파생한다.
프로토타입으로 객체를 확장하는 개념은 예를 보면 쉽게 이해할 수 있다. [예제]는 Object의 prototype 프로퍼티를 사용해서
String 객체를 확장하고 String 생성자를 사용해서 인스턴스를 생성하는 방법을 보여준다.
추가된 trim 메소드는 문자열에서 앞과 뒤에 있는 공백 문자들을 제거한다.
prototype 프로퍼티를 사용하여 String 객체에 trim 함수를 추가했기 때문에, 이 라이브러리를 사용하는 페이지 내에서는 기존의 String
객체 메소드/프로퍼티는 물론이고, 새로 추가된 trim 함수도 어디에서나 사용할 수 있다.
즉, 새로운 객체 클래스를 생성한 것이 아니라 기존 객체 클래스의 기능을 확장한 것이다.
바로 이것이 클래스 기반과 프로토타입의 차이점이다.
prototype 프로퍼티를 사용하는 대신, 문자열 인스턴스(변수)에 직접 trim함수를 추가할 수도 있다.
그러나 이렇게 하면 인스턴스만 함수에 접근할 수 있기 때문에, prototype을 사용해서 String 객체 자체에 추가해주는 것이 더 좋을 것이다.
자바스크립트의 모든 객체 (사용자 정의 객체도 포함)는 기능을 확장할 수 있도록 prototype 프로퍼티를 갖고 있다.
메소드에 접근할 때, 프로토타입이 어떻게 동작할까? 메소드를 호출하면 자바스크립트 엔진은 해당 메소드를 기본 객체 구현에서 찾는다.
만약 발견되지 않으면 prototype 집합에서 찾고 여기서도 발견되지 않으면 해당 변수에서 찾는다.
자바스크립트 객체는 일반적으로 하나의 생성자와 여러 개의 메소드/프로퍼티로 구성된다.
또한 Object라는 자바스크립트 표준 객체로부터 여러 가지 기능을 상속받는다.
Object 자체로는 그다지 흥미롭지 않다. 메소드들은 객체 내의 메소드로 사용되기보다는 점차
전역 함수로 사용되게 되었다. 이러한 것들로 eval이 있다.
Object는 새로운 객체를 생성할 때 프레임워크를 제공한다. 그러나 기존 객체지향 언어에서 제공하는
상속과 클래스의 개념을 통해서 하는 대신 프로토타입이라는 개념을 통해서 객체지향과 유사한 기능을 제공한다.
2. Prototype
일반적인 객체지향 프로그래밍에서는 기존의 클래스를 확장하여 새로운 클래스를 만들면 기존 클래스로부터 상속을 받는다.
그리고 나서 상속받은 기능을 재정의하거나 고유의 기능을 추가하는 수순을 밟는다.
반면에 자바스크립트에서는 Object 생성자를 이용해서 새로운 객체를 만든다. 따라서 새로운 객체와 그 프로퍼티에 메모리를
할당하는 것은 Object 생성자이다.
Object는 prototype프로퍼티도 제공한다. 이를 사용해서 String과 Number 같은 내장 객체는 물론이고 모든 객체를 확장할 수 있다.
즉, 클래스 상속이 아닌 프로토타입을 이용해서 새로운 객체의 메소드와 프로퍼티를 파생한다.
프로토타입으로 객체를 확장하는 개념은 예를 보면 쉽게 이해할 수 있다. [예제]는 Object의 prototype 프로퍼티를 사용해서
String 객체를 확장하고 String 생성자를 사용해서 인스턴스를 생성하는 방법을 보여준다.
추가된 trim 메소드는 문자열에서 앞과 뒤에 있는 공백 문자들을 제거한다.
<script>String.prototype.trim = function() {return (this.replace(/^[sxA0]+/, "").replace(/[sxA0]+$/, ""));}var sObj = new String(" This is the string ");sTxt = sObj.trim();document.writeIn("--" + sTxt + "--");</script>
객체 메소드/프로퍼티는 물론이고, 새로 추가된 trim 함수도 어디에서나 사용할 수 있다.
즉, 새로운 객체 클래스를 생성한 것이 아니라 기존 객체 클래스의 기능을 확장한 것이다.
바로 이것이 클래스 기반과 프로토타입의 차이점이다.
prototype 프로퍼티를 사용하는 대신, 문자열 인스턴스(변수)에 직접 trim함수를 추가할 수도 있다.
var str = " this is a string ";str.trm = function() ...
자바스크립트의 모든 객체 (사용자 정의 객체도 포함)는 기능을 확장할 수 있도록 prototype 프로퍼티를 갖고 있다.
메소드에 접근할 때, 프로토타입이 어떻게 동작할까? 메소드를 호출하면 자바스크립트 엔진은 해당 메소드를 기본 객체 구현에서 찾는다.
만약 발견되지 않으면 prototype 집합에서 찾고 여기서도 발견되지 않으면 해당 변수에서 찾는다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
57 | DOM과 innerHTML 방법에 대한 비교 분석 | 황제낙엽 | 2008.11.03 | 94 |
56 | 익명함수의 사용 | 황제낙엽 | 2008.10.14 | 20 |
55 | Javascript 내장객체 Array (배열) | 황제낙엽 | 2008.10.13 | 57 |
54 | 자바 스크립트에서 sleep 기능을~ | 황제낙엽 | 2008.10.02 | 32 |
53 | position스타일과 top, left스타일 | 황제낙엽 | 2008.09.24 | 28 |
52 | 자바스크립트에서 이벤트 처리에 대한 일련의 흐름 | 황제낙엽 | 2008.09.18 | 36 |
51 | 함수와 인자값 (arguments) | 황제낙엽 | 2008.08.12 | 15 |
50 | 중첩 함수, 함수 클로저 | 황제낙엽 | 2008.08.12 | 820 |
49 | 재사용 가능한 일회용 객체 | 황제낙엽 | 2008.08.08 | 133 |
48 | 생성자 체인과 상속 | 황제낙엽 | 2008.08.08 | 24 |
47 | Public/Private 프로퍼티와 this | 황제낙엽 | 2008.08.08 | 10 |
» | Object 와 Prototype | 황제낙엽 | 2008.08.08 | 21 |
45 | [펌]자바스크립트에서 객체 생성 방법 | 황제낙엽 | 2008.08.07 | 21 |
44 | [펌]JavaScript Class 만들기 | 황제낙엽 | 2008.08.07 | 18 |
43 | [펌]Function과 객체, this 키워드의 관계 | 황제낙엽 | 2008.08.07 | 19 |
42 | 자바스크립트의 데이터 타입과 변수 | 황제낙엽 | 2008.08.06 | 179 |
41 | [펌]객체지향 자바스크립트 | 황제낙엽 | 2008.08.06 | 20 |
40 | [펌]사용자 정의 클래스 생성 및 common library 의 개념. | 황제낙엽 | 2008.08.06 | 14 |
39 | 라이노 (Rhino) 관련 링크 모음 | 황제낙엽 | 2008.07.21 | 74 |
38 | Rhino scopes and contexts 에 대한 문서 | 황제낙엽 | 2008.07.18 | 27 |