IT/JavaScript

JavaScript #1 객체

Taegony 2008. 10. 15. 01:45
1. 객체 리터럴
  - 아무 것도 없거나 하나 이상의 이름/값 쌍들을 둘러싸는 중괄호이다.
  - 속성 이름은 어떤 문자열이라도 가능 (빈 문자열 포함) 하다.
  - 속성 이름이 유효한 이름이고 예약어가 아니면 따옴표는 생략가능하다.
[code javascript]
var objHello = {};
var objName = {
    "first-name": "Tae Gon",
    "last-name": "Kim", // '-' 이 있으므로 따옴표 사용
    number: 9876  // 유효하고 예약어가 아니므로 따옴표 생략
};
[/code]

2. 속성값 읽기/갱신/추가
  - 대괄호([])를 사용하여 읽는다.
  - 유효한 이름이고 예약어가 아닌 경우 마침표(.)를 대신 사용가능하다.
  - 존재하지 않는 속성을 읽으면 undefined 반환한다.
  - undefined 속성을 참조하려고 하면 TypeError 예외가 발생한다.
  - 존재하는 속성에 값을 할당하면 갱신된다.
  - 존재하지 않는 속성에 값을 할당하면 속성이 추가된다.
[code javascript]
document.write (objName["first-name"]); // Tae Gon 출력
document.write (objName.number); // 9876 출력
document.write (objName["middle-name"]); // undefined 출력

document.write (objName.mother); // undefined 출력
document.write (objName.mother.age); // TypeError 발생

// 예외 발생을 위해 다음과 같이 처리
var strValue = objName.mother && objName.mother.age;
document.write (strValue); // undefined 출력
[/code]

3. 객체는 참조 방식으로 전달된다.

4. 프로토타입
  - 객체 리터럴로 생성되는 모든 객체는 Object.prototype 객체에 연결된다.
  - 객체 생성시 해당 객체의 프로토타입이 될 객체를 선택가능하다.
  - 프로토타입 연결은 객체의 속성을 읽을 때만 사용한다.
  - 해당 속성이 객체에 없는 경우 프로토타입 객체에서 찾으려고한다.
    : prototype chain의 마지막인 Object.prototype까지 계속 이어진다.
    : 그래도 찾지 못하면 undefined를 반환한다.
    : 이것을 위임 (delegation)이라고 한다.
[code javascript]
// 함수를 new라는 전치 연산자와 함께 호출하면
// 호출한 함수의 prototype 속성의 값에 연결된 링크를 갖는 객체가 생성된다.
if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        var F = function () {
        F.prototype = o;
        return new F();
    };
}
var objName2 = Object.create (objName);
[/code]

5. Reflection
  - 객체에 어떠한 속성들이 있는지 접근해서 확인하는 것을 말한다.
  - typeof, hasOwnProperty, for in 등을 사용한다.
[code javascript]
// hasOwnProperty 는 prototype chain을 바라보지 않는다.
document.writeln (objName.hasOwnProperty ('first-name')); // true
document.writeln (objName.hasOwnProperty ('middle-name')); // false

// 열거 방식으로 확인
// 이 경우 순서가 이름순으로 나온다는 보장이 없다.
var name;
for (name in objName) {
    if (typeof objName[name] !== 'function') {
        document.writeln (name + ': ' + objName[name]);
    }
}
[/code]

6. 삭제
  - 객체의 속성을 삭제한다.
[code javascript]
delete objName['first-name'];
document.writeln (objName['first-name']); // undefined
[/code]

7. 전역변수의 최소화
  - 자바스크립트는 전역변수만을 지원한다.
    : 이것은 프로그램의 유연성을 떨어뜨린다.
[code javascript]
// 전역변수 사용을 최소화하는 방법들중 하나로써
// 전역변수 하나를 컨테이너로 사용한다.
var MYAPP = {};
MYAPP.objName = {
    'first-name': 'Tae Gon',
    'last-name': 'Kim'
};
document.writeln (MYAPP.objName['first-name']);
[/code]

공부한 책 : 자바스크립트 핵심가이드 - 더글라스 크락포드