SlideShare a Scribd company logo
1 of 11
객체란?
• 숫자, 문자열, 불리언(true/false), null, undefined를 제외한 다른 모든 값
• 변경 가능한 속성들의 집합
• 배열, 함수, 정규 표현식 등과 객체
• 이름과 값이 있는 속성들을 포함하는 컨테이너
• 속성의 이름은 문자열이면 모두 가능(빈 문자열도 포함)
• 속성의 값은 undefined를 제외한 모든 값
• 객체 하나는 다른 객체를 포함할 수 있다
01 객체 리터럴
• 표기법
var empty_object = {};
var stooge = {
“first-name” : “Jerome”,
“last-name” : “Howard”
}
• 속성 이름에 사용한 따옴표는 자바스크립트에서 사용할 수 있는 유효한 이름
이고 예약어가 아닐 경우 생략 가능(first_name O, first-name X)
• 쉼표(,)는 “속성이름”:”값” 쌍들을 구분하는데 사용
• 속성값은 어떠한 표현식도 가능
var flight = {
airline: “Oceanic”,
number: 815,
departure: {
IATA: “SYD”
},
arrival: {
IATA: “LAX”
}
}
02 속성값 읽기
• stooge[“first-name”] // “Jerome”
• flight.departure.IATA // “SYD”
• 존재하지 않는 속성을 읽으면 undefined 반환
• stooge[“middle-name”]
• flight.status
• stooge[“FIRST-NAME”]
• || 연산자를 사용하여 다음과 같이 기본값을 지정
• var middle = stooge[“middle-name”] || “(none)”;
• var status = flight.status || “unknown”;
• 존재하지 않는 속성(undefined)을 참조하려 할 때 TypeError 예외가 발생, 방
지하기 위해 && 연산자를 사용할 수 있다
• flight.equipment // undefined
• flight.equipment.model // throw “TypeError”
• flight.equipment && flight.equipment.model // undefined
03 속성값 갱신
• 객체의 값은 할당에 의해 갱신
• 속성 이름이 이미 존재하면 속성의 값만 교체
• stooge[‘first-name’] = ‘Jerome’;
• 속성 이름이 없는 경우 객체에 해당 속성을 추가
• stooge[‘middle-name’] = ‘Lester’;
• stooge.nickname = ‘Curly’;
• flight.equipment = {
• model: ‘Boeing 777’
• }
• flight.status = ‘overdue’;
04 참조
• 객체는 참조 방식으로 전달, 복사되지 않음
var x = stooge;
x.nickname = ‘Curly’;
var nick = stooge.nickname;
// 변수 nick의 값은 ‘Curly’
var a = {}, b = {}, c = {};
// a,b,c는 각각 다른 빈 객체를 참조
a = b = c = {};
// a,b,c는 모두 같은 빈 객체를 참조
05 프로토타입 - 1
• 모든 객체는 Object(자바스크립트 표준객체)의 속성인 prototype 객체에 연
결됩니다.(Object.prototype)
• 객체 생성시 해당 객체의 프로토타입이 될 객체를 선택할 수 있습니다.
if (typeof Object.create !== ‘function’) {
Object.create = function(o) {
var F = function() {};
F.prototype = o;
return new F();
}
}
var another_stooge = Object.create(stooge);
• 프로토 타입 연결은 값의 갱신에 영향을 받지 않습니다. 즉 객체를 변경하더
라도 객체의 프로토타입에는 영향을 미치지 않습니다.
another_stooge["first-name"] = 'Harry';
another_stooge["middle-name"] = 'Moses';
another_stooge.nickname = 'Moe';
• 프로토타입 연결은 오로지 객체의 속성을 읽을 때만 사용
• 객체의 특정 속성의 값을 읽으려고 하는데 존재하지 않는 경우 프로토타입에
서 속성을 찾으려고 합니다. 이러한 시도는 프로토타입 체인의 가장 마지막
에 있는 Object.prototype 까지 계속해서 이어집니다.
05 프로토타입 - 2
• 프로토타입 관계는 동적 관계입니다. 해당 프로토타입에 새로운 속성이 추가
되면 해당 프로토타입을 근간으로 하는 객체는 즉각적으로 이 속성이 나타납
니다.
stooge.profession = 'actor';
another_stooge.profession // ‘actor’
06 리플렉션
• 객체에 있는 속성의 타입을 살펴보는 typeof 연산자
• typeof flight.number // number
• typeof flight.status // string
• typeof flight.arrival // object
• typeof flight.manifest // undefined
• 해당 객체의 속성이 아니라 프로토타입 체인 상에 있는 속성을 반환할 수도
있다.
• typeof flight.toString // function
• typeof flight.constructor // function
• 객체에 특정 속성이 있는지를 확인하는 hasOwnProperty 메소드
• hasOwnProperty 메소드는 프로토타입 체인을 바라보지 않습니다.
• flight.hasOwnProperty(‘number’) // true
• flight.hasOwnProperty(‘constructor’) // false
07 열거
• for in 구문을 사용하면 객체에 있는 모든 속성의 이름을 열거할 수 있습니다.
이러한 열거방법은 함수나 프로토타입에 있는 속성 등 모든 속성이 포함되기
때문에 원하지 않는 것들을 걸러낼 필요가 있습니다.
var name;
for (name in another_stooge) {
if (typeof another_stooge[name] !== ‘function’) {
document.writeln(name + “:” + another_stooge[name]);
}
}
• for in 구문의 경우 속성들이 이름순으로 나온다는 보장이 없습니다. 특정 순
으로 속성 이름들이 열거되기를 원한다면 열거되기 원하는 순서를 특정 배열
로 지정하고 이 배열을 이용하여 객체의 속성을 열거할 수 있습니다.
08 삭제
• delete 연산자를 통해 객체의 속성을 삭제할 수 있습니다.
• 해당 객체에 속성이 있는 경우에 삭제를 하며 프로토타입 연결 상에 있는 객
체들은 접근하지 않습니다.
• 객체에서 특정 속성을 삭제했는데 같은 이름의 속성이 프로토타입 체인에 있
는 경우 프로토타입의 속성이 나타납니다.
another_stooge.nickname // Moe
delete another_stooge.nickname;
another_stooge.nickname // Curly
09 최소한의 전역변수 사용
• 자바스크립트에서는 전역변수 사용이 매우 쉽습니다.
• 전역변수는 프로그램의 유연성을 약화하기 때문에 가능하면 피하는 것이 좋
습니다.
• 전역변수 최소화의 방법중 한 가지는 애플리케이션에서 전역변수 사용을 위
해 다음과 같은 전역변수 하나를 만드는 것입니다.
var MYAPP = {};
MYAPP.stooge = {
"first-name": "Joe",
"last-name": "Howard"
};
• 이러한 방법으로 전역변수를 이름 하나로 관리하면 다른 애플리케이션이나
라이브러리들과 연동할 때 발생하는 문제점을 최소화활 수 있습니다. 또한
MYAPP.stooge 가 명시적으로 전역변수라는 것을 나타내기 때문에 가독성도
높아집니다.

More Related Content

What's hot

Scala block expression
Scala block expressionScala block expression
Scala block expressionYong Joon Moon
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understandingYong Joon Moon
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive ReviewDataUs
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6민태 김
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object민태 김
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy송미 이
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Functionwonmin lee
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Park Jonggun
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)유석 남
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
비개발자를 위한 Javascript 알아가기 #5
비개발자를 위한 Javascript 알아가기 #5비개발자를 위한 Javascript 알아가기 #5
비개발자를 위한 Javascript 알아가기 #5민태 김
 

What's hot (20)

Scala block expression
Scala block expressionScala block expression
Scala block expression
 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
 
Scala type args
Scala type argsScala type args
Scala type args
 
Scala namespace scope
Scala namespace scopeScala namespace scope
Scala namespace scope
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy
 
(AngularJS,React를 위한 자바스크립트)getter, setter of class_AngularJS교육/ReactJS교육/자바스...
(AngularJS,React를 위한 자바스크립트)getter, setter of class_AngularJS교육/ReactJS교육/자바스...(AngularJS,React를 위한 자바스크립트)getter, setter of class_AngularJS교육/ReactJS교육/자바스...
(AngularJS,React를 위한 자바스크립트)getter, setter of class_AngularJS교육/ReactJS교육/자바스...
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
비개발자를 위한 Javascript 알아가기 #5
비개발자를 위한 Javascript 알아가기 #5비개발자를 위한 Javascript 알아가기 #5
비개발자를 위한 Javascript 알아가기 #5
 

Similar to 생코자바스크립트스터디3장

JavaScript Patterns - Chapter 3. Literals and Constructors
JavaScript Patterns - Chapter 3. Literals and ConstructorsJavaScript Patterns - Chapter 3. Literals and Constructors
JavaScript Patterns - Chapter 3. Literals and ConstructorsHyuncheol Jeon
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장Software in Life
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스Lee Dong Wook
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
9 object class
9 object class9 object class
9 object class웅식 전
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7Yeonah Ki
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oopYoung-Beom Rhee
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2지수 윤
 
Javascript 객체생성패턴
Javascript 객체생성패턴Javascript 객체생성패턴
Javascript 객체생성패턴KIM HEE JAE
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본용호 최
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Circulus
 

Similar to 생코자바스크립트스터디3장 (20)

JavaScript Patterns - Chapter 3. Literals and Constructors
JavaScript Patterns - Chapter 3. Literals and ConstructorsJavaScript Patterns - Chapter 3. Literals and Constructors
JavaScript Patterns - Chapter 3. Literals and Constructors
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
9 object class
9 object class9 object class
9 object class
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
 
Javascript 객체생성패턴
Javascript 객체생성패턴Javascript 객체생성패턴
Javascript 객체생성패턴
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
Java script
Java scriptJava script
Java script
 
Javascript
JavascriptJavascript
Javascript
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 

생코자바스크립트스터디3장

  • 1. 객체란? • 숫자, 문자열, 불리언(true/false), null, undefined를 제외한 다른 모든 값 • 변경 가능한 속성들의 집합 • 배열, 함수, 정규 표현식 등과 객체 • 이름과 값이 있는 속성들을 포함하는 컨테이너 • 속성의 이름은 문자열이면 모두 가능(빈 문자열도 포함) • 속성의 값은 undefined를 제외한 모든 값 • 객체 하나는 다른 객체를 포함할 수 있다
  • 2. 01 객체 리터럴 • 표기법 var empty_object = {}; var stooge = { “first-name” : “Jerome”, “last-name” : “Howard” } • 속성 이름에 사용한 따옴표는 자바스크립트에서 사용할 수 있는 유효한 이름 이고 예약어가 아닐 경우 생략 가능(first_name O, first-name X) • 쉼표(,)는 “속성이름”:”값” 쌍들을 구분하는데 사용 • 속성값은 어떠한 표현식도 가능 var flight = { airline: “Oceanic”, number: 815, departure: { IATA: “SYD” }, arrival: { IATA: “LAX” } }
  • 3. 02 속성값 읽기 • stooge[“first-name”] // “Jerome” • flight.departure.IATA // “SYD” • 존재하지 않는 속성을 읽으면 undefined 반환 • stooge[“middle-name”] • flight.status • stooge[“FIRST-NAME”] • || 연산자를 사용하여 다음과 같이 기본값을 지정 • var middle = stooge[“middle-name”] || “(none)”; • var status = flight.status || “unknown”; • 존재하지 않는 속성(undefined)을 참조하려 할 때 TypeError 예외가 발생, 방 지하기 위해 && 연산자를 사용할 수 있다 • flight.equipment // undefined • flight.equipment.model // throw “TypeError” • flight.equipment && flight.equipment.model // undefined
  • 4. 03 속성값 갱신 • 객체의 값은 할당에 의해 갱신 • 속성 이름이 이미 존재하면 속성의 값만 교체 • stooge[‘first-name’] = ‘Jerome’; • 속성 이름이 없는 경우 객체에 해당 속성을 추가 • stooge[‘middle-name’] = ‘Lester’; • stooge.nickname = ‘Curly’; • flight.equipment = { • model: ‘Boeing 777’ • } • flight.status = ‘overdue’;
  • 5. 04 참조 • 객체는 참조 방식으로 전달, 복사되지 않음 var x = stooge; x.nickname = ‘Curly’; var nick = stooge.nickname; // 변수 nick의 값은 ‘Curly’ var a = {}, b = {}, c = {}; // a,b,c는 각각 다른 빈 객체를 참조 a = b = c = {}; // a,b,c는 모두 같은 빈 객체를 참조
  • 6. 05 프로토타입 - 1 • 모든 객체는 Object(자바스크립트 표준객체)의 속성인 prototype 객체에 연 결됩니다.(Object.prototype) • 객체 생성시 해당 객체의 프로토타입이 될 객체를 선택할 수 있습니다. if (typeof Object.create !== ‘function’) { Object.create = function(o) { var F = function() {}; F.prototype = o; return new F(); } } var another_stooge = Object.create(stooge); • 프로토 타입 연결은 값의 갱신에 영향을 받지 않습니다. 즉 객체를 변경하더 라도 객체의 프로토타입에는 영향을 미치지 않습니다. another_stooge["first-name"] = 'Harry'; another_stooge["middle-name"] = 'Moses'; another_stooge.nickname = 'Moe'; • 프로토타입 연결은 오로지 객체의 속성을 읽을 때만 사용 • 객체의 특정 속성의 값을 읽으려고 하는데 존재하지 않는 경우 프로토타입에 서 속성을 찾으려고 합니다. 이러한 시도는 프로토타입 체인의 가장 마지막 에 있는 Object.prototype 까지 계속해서 이어집니다.
  • 7. 05 프로토타입 - 2 • 프로토타입 관계는 동적 관계입니다. 해당 프로토타입에 새로운 속성이 추가 되면 해당 프로토타입을 근간으로 하는 객체는 즉각적으로 이 속성이 나타납 니다. stooge.profession = 'actor'; another_stooge.profession // ‘actor’
  • 8. 06 리플렉션 • 객체에 있는 속성의 타입을 살펴보는 typeof 연산자 • typeof flight.number // number • typeof flight.status // string • typeof flight.arrival // object • typeof flight.manifest // undefined • 해당 객체의 속성이 아니라 프로토타입 체인 상에 있는 속성을 반환할 수도 있다. • typeof flight.toString // function • typeof flight.constructor // function • 객체에 특정 속성이 있는지를 확인하는 hasOwnProperty 메소드 • hasOwnProperty 메소드는 프로토타입 체인을 바라보지 않습니다. • flight.hasOwnProperty(‘number’) // true • flight.hasOwnProperty(‘constructor’) // false
  • 9. 07 열거 • for in 구문을 사용하면 객체에 있는 모든 속성의 이름을 열거할 수 있습니다. 이러한 열거방법은 함수나 프로토타입에 있는 속성 등 모든 속성이 포함되기 때문에 원하지 않는 것들을 걸러낼 필요가 있습니다. var name; for (name in another_stooge) { if (typeof another_stooge[name] !== ‘function’) { document.writeln(name + “:” + another_stooge[name]); } } • for in 구문의 경우 속성들이 이름순으로 나온다는 보장이 없습니다. 특정 순 으로 속성 이름들이 열거되기를 원한다면 열거되기 원하는 순서를 특정 배열 로 지정하고 이 배열을 이용하여 객체의 속성을 열거할 수 있습니다.
  • 10. 08 삭제 • delete 연산자를 통해 객체의 속성을 삭제할 수 있습니다. • 해당 객체에 속성이 있는 경우에 삭제를 하며 프로토타입 연결 상에 있는 객 체들은 접근하지 않습니다. • 객체에서 특정 속성을 삭제했는데 같은 이름의 속성이 프로토타입 체인에 있 는 경우 프로토타입의 속성이 나타납니다. another_stooge.nickname // Moe delete another_stooge.nickname; another_stooge.nickname // Curly
  • 11. 09 최소한의 전역변수 사용 • 자바스크립트에서는 전역변수 사용이 매우 쉽습니다. • 전역변수는 프로그램의 유연성을 약화하기 때문에 가능하면 피하는 것이 좋 습니다. • 전역변수 최소화의 방법중 한 가지는 애플리케이션에서 전역변수 사용을 위 해 다음과 같은 전역변수 하나를 만드는 것입니다. var MYAPP = {}; MYAPP.stooge = { "first-name": "Joe", "last-name": "Howard" }; • 이러한 방법으로 전역변수를 이름 하나로 관리하면 다른 애플리케이션이나 라이브러리들과 연동할 때 발생하는 문제점을 최소화활 수 있습니다. 또한 MYAPP.stooge 가 명시적으로 전역변수라는 것을 나타내기 때문에 가독성도 높아집니다.