객체 기초 이해
객체 생성 방식
const newObject = new Object()
속성 정의 방법
const vehicle = new Object()
vehicle.brand = 'Yamaha'
vehicle.model = 'V-Star Silverado 1100'
vehicle.year = 2005
vehicle.purchaseDate = new Date(2005, 3, 12)
객체 속성은 초기화 단계에서 명시적으로 선언할 필요가 없으며, 할당 시 자동으로 생성된다.
객체는 속성 집합으로, 각 속성은 키와 값으로 구성된다. 키는 문자열 형식이며, 값은 숫자, 문자열, 날짜, 배열, 다른 객체 등 모든 자바스크립트 타입이 될 수 있다.
속성은 단순한 데이터 타입에 한정되지 않으며, 다른 객체 인스턴스를 포함할 수 있다. 이 구조는 데이터 모델에 따라 무한히 중첩될 수 있다.
const ownerInfo = new Object()
ownerInfo.fullName = 'Spike Spiegel'
ownerInfo.job = 'bounty hunter'
vehicle.owner = ownerInfo
점 연산자는 속성 접근의 간단한 형태이며, 문자열 형식의 키는 대괄호 연산자를 사용해야 한다. 다음 세 가지 접근 방식은 동등한 결과를 제공한다:
vehicle.brand
vehicle['brand']
vehicle['bra' + 'nd']
유효한 식별자로 구성되지 않은 경우에만 일반적인 참조 연산자를 사용해야 한다.
객체 리터럴 구문
이전 방식은 복잡하고 오류가 발생하기 쉬우므로, 보다 간결한 표현 방식이 존재한다:
const vehicle = {
brand: 'Yamaha',
model: 'V-Star Silverado 1100',
year: 2005,
purchaseDate: new Date(2005, 3, 12),
owner: {
fullName: 'Spike Spiegel',
job: 'bounty hunter'
}
}
이 구문은 JSON 형식과 유사하다.
글로벌 객체로서의 특성
전역 변수는 window 객체의 속성으로 간주된다. 함수 범위 외부에서 선언된 변수는 다음 세 가지 방식으로 동일하게 처리된다:
let value = data
window.value = data
value = data
함수의 일등 시민 권한
함수 정의 방식
다음 코드는 동일한 결과를 반환한다:
function execute() { }
execute = function () { }
등호 우측의 표현식은 함수 리터럴로 불린다.
콜백 함수 활용
this 키워드의 의미
this는 함수 실행 컨텍스트를 나타내며, 함수 호출 방식에 의해 결정된다. 동일한 함수라도 호출 방식에 따라 다른 객체를 가리킬 수 있다.
const vehicle = {
brand: 'Yamaha',
model: 'V-Star Silverado 1100',
year: 2005,
purchaseDate: new Date(2005, 3, 12),
owner: {
fullName: 'Spike Spiegel',
job: 'bounty hunter'
},
// this 테스트
identify: function () {
return this.year + ' ' + this.brand + ' ' + this.model
}
}
- 전역 함수는 window 객체의 속성으로, 전역에서 호출 시 window 객체가 컨텍스트가 된다.
- 객체 속성으로 호출 시 해당 객체가 함수의 컨텍스트가 된다.
- 함수 객체의 call() 메서드 첫 번째 인자는 컨텍스트를 지정한다.
- 함수 객체의 apply() 메서드 첫 번째 인자는 컨텍스트를 지정한다.
객체 o가 함수 f의 호출 컨텍스트로 사용될 때, 함수 f는 객체 o의 메서드로 작동한다.
클로저
클로저는 실행 환경의 지역 변수를 참조하는 함수 인스턴스이다.