javascript 재해석


//*** micro software 2007년 4월호 내용중 정리 목적으로 포스팅합니다. ***//

1. 코어 자바스크립트 ?

  • XMLHttpRequest 등의 오브젝트는 웹브라우저의 API일뿐
  • 확장 API를 제외한 Date, RegExp 등의 오브젝트들이 코어 자바스크립트의 영역임

2. 버전들

  • ECMA : 자바스크립트 언어 표준화 기구
  • 현재 Ajax 프로그래밍은 대부분의 브라우저가 지원하는 javascript 1.5 (ECMA 3번째 개정안)을 반탕바탕으로 함

3. primitive data type

  • 기본 데이타 타입 : boolean, number(64비트 부동소수점), string
  • 참고로 ActionScript 3.0은 int, uint 도입함

4. object

  • javascript object는 해시테이블이 되기도 하고 객체지향의 오브젝트가 되기도 한다
var person = {};                         // 빈 오브젝트 객체 생성
person["name"] = "kimstar";       // 해시테이블처럼..
print(person.name);                   // 객체처럼..

person.gender = "male";
print(person["gender"]);
  • 동적 객체 속성 참조
var fullname = "";
for(i=0; i<4; i++) {
    fullname += customer["name"+i];      // name0~name3 속성을 입력함
}
  • 오브젝트 상수를 이용한 정의 – call by name을 사용시 유용
var person = {
    "name : kimstar",
    "age : 20"
}
  • 오브젝트 인자 지정
var test = {opt1 : "opt1", opt2 : "opt2"};
printl(o["opt1"]);

5. 함수

  • 함수가 제1클래스이다
// 1번째방법
function f(x) { retrun x*x; }

// 2번째방법
var f = function(x) { retrun x*x; };

// 익명 함수 호출
(function(a,b) {
    var c=a+b;
    return c;
})(obj1.foo.num1, obj2.foo.num2);
  • 중첨함수 허용 – 특정함수에서 보조함수가 필요한 경우 네임스페이스를 깔끔하게
function hypotenuse(a,b) {
    function square(x) {return x*x;}
    return Math.sqrt(square(a)+square(b));
}
  • 클로저(closure) 지원 – 아래는 Rhino에서의 예제
js> function add_x(x) {
    return function(y) {return x+y);       // 함수의 결과값으로 함수를 리턴
}

js> f = add_x(3);                               // x값 3은 외부환경(lexical scope)이 보존된다.

function (y) {
    return x+y;
}

js> f(4);                                           // x값이 보존되어 3+4=7
7

js> f(5);                                           // x값이 보존되어 5+4=7
8
  • 함수도 오브젝트
var add = function(x,y0 {return x+y);
add.name = "addtion";


6. 클래스, 생성자, 프로토타입

  • 클래스 : javascript는 객체지향언어, but 클래스 개념은 없다
function Rectabgle(w,h) {
    this.width = w;
    this.height = h;
}

var rec1 = new Rectabgle(1,2);
var rec2 = new Rectabgle(3,4);
    1. new 연산자가 빈 오브젝트 {} 생성하여 Rectangle함수에 넘김
    2. 생성된 오브젝트는 Rectangle함수의 this를 참조할 수 있다
    3. 두개의 인자를 width, height에 값으로 세팅한다.
    4. Rectangle은 리턴값을 별도로 정의하지 않았으므로, 리턴값은 자동으로 this가 된다.
    5. 결과적으로 rect1은 {width:1, height:2}인 오브젝트가 된다.
  • 메서드 : 오브젝트의 속성으로서 함수를 사용하여 메소드 개념을 구현
var r = Rectangle(1,2);
r.area = function() { return this.width * this.height; }
  • 프로토타입 : 오브젝트 속성을 참조할때 자신의 속성을 먼저 찾고, 없으면 오브젝트 생성한 함수의 prototype 참조함, 상속의 개념을 흉내…
function Rectabgle(w,h) {
    this.width = w;
    this.height = h;
}

Rectangle.prototype.area = function() { return this.width * this.height; };
var rec1 = new Rectabgle(1,2);
var rec2 = new Rectabgle(3,4);

r1.area = function() { return 0; }

r1.area(); // -> 0, r1의 area를 호출
r2.area(); // -> 12, r2에는 area 속성이 없으므로 Rectangle.prototype.area 를 호출

 

 

 
사용자 삽입 이미지

2개의 댓글

댓글 남기기