[노란책] 객체지향프로그래밍

객체지향프로그래밍

자바스크립트에서의 객체(Object)는 값을 닮을 수 있는 해시테이블에 불과함 클래스 개념이 없기 때문에 어떤 객체의 값을 복사하는 등의 일을 할 수 없음

프로퍼티 타입

데이터를 어떻게 저장하는 가에 따라 두 가지 프로퍼티 타입이 있다: Data Property 와 Accessor Property 각 프로퍼티 타입별로 내부적으로 정의된 속성값이 있다.

프로퍼티 타입의 속성

Data Property: 값을 직접 저장하는 프로퍼티, 일반적으로 객체의 프로퍼티를 정의하면 Data Property로 지정된다. Accessor Property: getter, setter를 정의하여 값을 저장하는 프로퍼티

두 프로퍼티가 공통적으로 갖는 속성

Data Property만 같고 있는 속성

Accessor Property의 경우

프로퍼티 정의하기

리터럴 방식

var obj = {
  name: 'hello'
}

Object.defineProperty

Object.defineProperty(obj, 'name', {
  value: 'hello',
})

Object.defineProperties(obj, {
  name: {
    value: 'hello',
  },
  age: {
    set: function(age) { this._age = age; },
    get: function() { return this._age; }
  }
});

프로퍼티 속성 읽기

Object.getOwnPropertyDescriptor()

객체 생성하기

팩토리 패턴:

생성자 패턴:

프로토타입 패턴:

혼합 프로토타입 패턴:

상속

프로토타입 체이닝

생성자 훔치기 패턴

프로토타입만 복사해서 연결