====== 클래스 - 기본 ======
내장된 기본 객체의 사용, 클래스 사용의 기본.
var now = new Date();
var year = now.getFullYear();
내장 객체가 아닌 임의의 새로운 클래스 생성
// 클래스이름 : MainClass와 같이 영문으로 구성되는 이름
// 파라미터 : 파라미터1, 파라미터2, 와 같이 콤마로 구분되는 파라미터들
//- 코드의 형식 -
클래스이름 = function( 파라미터 )
{
// ...
}
실제 사용하는 코드의 예시, 함수처럼 보이지만. javascript에서는 클래스 선언과 생성자다.
//- 간단한 예제
MainClass = function( myId, yourName )
{
this.myId = myId;
this.yourName = yourName;
}
클래스의 변수(프로퍼티)는,
* 'this.프로퍼티이름' : 클래스의 프로퍼티.
클래스의 사용은 내장 객체(클래스)를 사용하는 방법과 같다. 'new'연산자로 할당한다.
클래스의 변수를 추가하는 방법은 prototype 키워드를 사용해서 메소드를 추가한다.
클래스이름.prototype.함수이름 = function(파라미터) {
//...
}
사용하는 예제.
MainClass.prototype.doSomething( cmd )
{
this.cmd = cmd;
}
MainClass를 사용한다면 이렇게 쓴다.
var _mc = new MainClass( 'a', 'b' );
_mc.doSomething( 'quit' );
리턴할 값이 있다면 'return' 키워드로 값을 돌려준다.
MainClass.prototype.showResult() {
return 1;
}
클래스의 함수 선언은 동적으로 가능하다.
var _mc = new MainClass( 'a', 'b' );
_mc.doSomething( 'quit' );
_mc.printThis = function() {
return xx;
}
====== JSON 표기 =====
JSON = Javascript Object Notation, 데이터를 표기하는 방법
- 이름과 값을 쌍으로 표시
- 배열
이름/값의 형식으로
{ 이름1 : 값, 이름2 : 값 }
var countries = { ko : '한국', jp : '일본' }
var koName = countries.ko;
var jpName = countries['jp'];
배열
[ 값0, 값1, 값2 ]
var countries = [ 'ko', 'jp ]
var koName = countries[0];
var jpName = countries[1];
(이름/값) 형식과 배열 형식을 혼합해서 사용
var _member = {
name : '홍길동',
likeColor : ['black','white']
};
var _msg = _member.name + "/ 색 " +
member.likeColor.length + "/ 첫번째 색 : " + member.likeColor[0];
JSON을 사용한 클래스 정의
// 형식
클래스이름 = function(파라미터)
{
}
클래스이름.prototype =
{
함수이름1 : function(파라미터) {
} ,
함수이름2 : function(파라미터) {
}
}
JSON을 사용한 클래스 정의 - 실제 코드
MainClass = function( myId, yourName )
{
this.myId = myId;
this.yourName = yourName;
}
MainClass.prototype =
{
doSomething : function( cmd )
{
this.cmd = cmd;
} ,
printThis : function() {
return xx;
}
}
====== 패키지 정의하기 ======
C++의 namespace와 같은 역할.
선언하는 예
var ajax = new Object();
ajax.Request = function() {}
ajax.Request.prototype = {
someFunc : function() {
}
}
사용하는 방법
var req = new ajax.Request();
req.someFunc();
중첩 선언 가능하다.
var ajax = new Object();
ajax.part1 = new Object();
ajax.part1.Request = function() {}
ajax.part1.Request.prototype = {
someFunc : function() {}
}
var req = new ajax.part1.Request();
Object 클래스를 사용하지 않고, JSON 방식으로 선언할 수 있다.
var ajax = {};
ajax.part1 = {};
ajax.part1.Request = function() {}
====== 상속 ======
언어에서는 지원하지 않지만, prototype을 사용해서 구현은 가능
// 부모 클래스 선언
Daddy = function( param1 ) { //...
this.param1 = param1;
}
Daddy.prototype.getName = function() {
return param1;
}
Daddy.prototype.toString = function() {
return this.param1 + "xxxx desu";
}
// 자식클래스 - 정의
ChildOne = function( param1 ) {
this.param1 = param1;
}
// 자식클래스 - 상속
ChildOne.prototype = new Daddy;
// 자식클래스 - 함수 오버라이딩
ChildOne.prototype.toString = function() {
return this.param1 + "from child.";
}
상속된 클래스가 사용 되는 모습
var dad = new Daddy("p");
var child = new ChildOne("c");
var _msg =
dad.getName() + "/ " + dad.toString() + "\n" +
child.getName() + "/ " + // 부모에서 상속된 getName() 실행
child.toString() + "\n"; // 자식쪽에서 오버라이딩된 toString() 실행
===== 부모의 함수 호출하기 =====
appy(this) 함수로 부모의 함수 호출.
// 새로운 부모
Line = Function( x1, y1, x2, y2 ) { // ...
}
Line.prototype.getLength = function() {
return Math.sqrt(..);
}
// 자식 클래스 선언과 부모쪽 함수의 선언
RatioLine = Function( x1, y1, x2, y2, ratio ) { // ...
this.ratio = ratio;
}
RatioLine.prototype = new Line;
RatioLine.prototype.getLength = function() {
var _len = Line.prototype.getLength.appy(this);
return _len * this.ratio;
}
부모 클래스의 이름을 사용하지 않고 부모의 함수 실행
// 위의 코드에서
RatioLine.prototype.getLength = function() {
// (old) : var _len = Line.prototype.getLength.appy(this);
var _len = this.parent.getLength.appy(this);
return _len * this.ratio;
}
JSON 방식으로 설정하는 부분 - 패스