아래 박진남 님께서 만들어주신 날짜 선택기를 보고 팁 올려드립니다.

자바 스크립트에서는 클래스 라는 문법이 없지만 function 을 이용해서 클래스를 만들 수 있습니다.

간단한 예제를 봅시다

/* Class */ function ClassTest(arg1,arg2) {
// property
this.prop1 = arg1;
this.prop2 = arg2;

//method
this.getProp1 = getProp1;
}

function getProp1() {
return this.prop1;
}

test = new ClassTest("안녕하세요","거친마루입니다");
alert(test.getProp1());

/* 결과는 "안녕하세요" 라는 경고창이 뜨겠지요 */

함수 내에서 this.variable 로 쓴것이 그 객체의 프로퍼티가 되는것이고 함수를 만들어서 연결시켜주면 그것이 곧 메소드가 되는겁니다.
this.getProp1 = getProp1; 이것은 ClassTest의 getProp1 메소드를 getProp1() 이라는 함수와 연결시킨다는 뜻입니다.
그래서 getProp1 이라는 함수에는 prop1 이라는 속성이 없지만.. ClassTest 클래스에 있는 prop1 속성을 return 할 수 있는것이지요..

좀 이상하게 여기실 겁니다..
대신!! 한개의 메소드 모형을 만들어서 여러 객체에서 메소드로써 사용할 수도 있습니다..
근데 메소드가 수십개가 되다보면 어떤 함수가 어떤 객체의 메소드였는지 핵갈릴 수도 있고.. 네이밍에도 문제가 생길껍니다..

그래서 전 한동안 이런식으로 코딩했었습니다.

/* Class */ function ClassTest(arg1,arg2) {
// property
this.prop1 = arg1;
this.prop2 = arg2;

//method
function ClassTest_getProp1() {
return this.prop1;
} this.getProp1 = ClassTest_getProp1;
}

좀 황당하지만.. 자바스크립트에선 function 의 중복이 가능합니다.. 그래서 메소드를 클래스 역할을 하는 함수 안쪽에 집어넣고 함수 이름 역시 클래스 이름 접두어를 두어서 겹치지 않게 배려했었지요..
그런데 얼마전에.. 또 다른 문법이 가능하다는것이 떠올랐습니다.

/* Class */ function ClassTest(arg1,arg2) {
// property
this.prop1 = arg1;
this.prop2 = arg2;

//method
this.getProp1() = function() {
return this.prop1;
}
this.hello = function (name) {
alert( name + "님 안녕하세요!!");
}
}

신기하지요 : ) 이렇게 해서 최대한 타 언어 클래스와 유사해 보이도록 코딩 해봤습니다.
Posted by 퓨전마법사
,