//*** 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);
- new 연산자가 빈 오브젝트 {} 생성하여 Rectangle함수에 넘김
- 생성된 오브젝트는 Rectangle함수의 this를 참조할 수 있다
- 두개의 인자를 width, height에 값으로 세팅한다.
- Rectangle은 리턴값을 별도로 정의하지 않았으므로, 리턴값은 자동으로 this가 된다.
- 결과적으로 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 를 호출




반탕으로 함에 한 표~
수정했음