자바스크립트 강좌 9 - 클래스, 생성자, 프로토타입 속성
Javascript 2012. 3. 8. 19:07
8. 자바스크립트 클래스, 생성자, 프로토 타입
1. 함수
1 - 1. 자바스크립트의 (클래스, 생성자) 라는 단어는 코드 설계상 의미 부여한 이름일 뿐이지 실제 언어에 구현되어 있는
기능이 아닙니다.
기능이 아닙니다.
1 - 2. 생성자 (new 연산자와 함께 객체를 생성 하도록 설계된 함수를 생성자라고 합니다.)
1 - 3. 프로토 타입과 상속 (함수 객체의 프로퍼티이자 호출 가능한 맴버 그룹을 나타내며, 그리고 각 맴버 끼리의 상속 또한 가능합니다.) * 여기서 상속이란 단어 또한 의미상 부여한 이름일 뿐입니다.
1 - 4. 상속 없이 확장하기
1 - 5. constructor, instanceof 연산자란?
1 - 6. 객체 타입 판단하기 (typeof 연산자를 활용한 객체 타입 검사)
1 - 6. 객체 타입 판단하기 (typeof 연산자를 활용한 객체 타입 검사)
2. 예제 코드
-
/*
-
-
2. [1 - 2] 예제 코드
-
-
*/
-
-
function fn(){
-
-
this.x = 'x';
-
this.y = 'y';
-
-
return this;
-
};
-
-
-
// 여기서 객체의 맴버 구조를 가지고 있는 설계도인 fn을 클래스라 하며, 인스턴스 생성을 위한 함수인 fn()을 생성자 함수라 부릅니다.
-
var o = new fn()
-
-
/*
-
-
2. [1 - 3] 예제 코드
-
-
*/
-
-
-
function fn(){
-
-
this.x = 'x';
-
this.y = 'y';
-
-
return this;
-
};
-
-
fn.prototype.getX = function(){
-
return this.x;
-
};
-
-
function fn1(){
-
return this;
-
};
-
-
// 프로토타입 맴버에 fn 객체를 추가(상속) 한다.
-
fn1.prototype = new fn();
-
-
alert(new fn().getX()); // x
-
alert(new fn1().getX()); // x
-
-
-
/*
-
-
2. [1 - 4] 예제 코드
-
-
*/
-
-
function fn(){
-
-
this.x = 'x';
-
this.y = 'y';
-
-
return this;
-
};
-
-
fn.prototype.getX = function(){
-
return this.x;
-
};
-
-
function fn2(){
-
-
this.x = 'x1';
-
this.y = 'y1';
-
-
return this;
-
};
-
-
-
for (var n in fn.prototype){
-
fn2.prototype[n] = o[n];
-
}
-
-
alert(new fn2().getX()); // x1
-
-
/*
-
-
2. [1 - 5] 예제 코드
-
-
*/
-
-
function fn(){
-
-
this.x = 'x';
-
this.y = 'y';
-
-
return this;
-
};
-
-
-
//new fn()객체의 생성자함수 fn을 반환합니다.
-
alert(new fn().constructor); // fn
-
-
//new fn()객체는 fn 생성자함수로 부터 생성되었습니다.
-
alert(new fn() instanceof fn); // true
-
-
-
/*
-
-
2. [1 - 6] 예제 코드
-
-
*/
-
-
// 객체는 당연히 object 반환한다.
-
alert(typeof {}); // obejct
-
-
// 자바스크립트에서 배열은 객체이기 때문에 object를 반환한다.
-
alert(typeof []); // object
-
-
// null 또한 객체이다.
-
alert(typeof null); // object
-
-
// undefined는 undefined를 반환한다.
-
alert(typeof undefined); // undefined
-
-
-
/*
-
-
위에서 보는 바와 같이 함수 내부에서 매개변수 타입을 검사할때 단순히 typeof로만 검사하는것은 조금 무리가 따릅니다.
-
-
이를 좀 더 보안하기 위한 방법으로 아래와 같은 방법이 있을수 있습니다.
-
-
*/
-
-
// constructor
-
alert(typeof {} === 'object' && {}.constructor === Object); // true
-
alert(typeof [] === 'object' && [].constructor === Array); // true
-
alert(typeof 'str' === 'string' && 'str'.constructor === String); // true
-
-
// instanceof
-
alert(typeof {} === 'object' && {} instanceof Object); // true
-
alert(typeof [] === 'object' && [] instanceof Array); // true
위 포스트에 대한 더 자세한 내용은 아래 이전 포스트를 참조 하시기 바랍니다.
참고서적: (자바스크립트 핵심 가이드)