LHJ

I'm a FE developer.

17-1. Object 오브젝트(ES5 기준) / ES5 Object 특징, ES5 Object 함수, 프로퍼티 디스크립터

06 Dec 2020 » js_beginner

17-1. Object 오브젝트(ES5 기준) / ES5 Object 특징, ES5 Object 함수, 프로퍼티 디스크립터

ES5 Object 특징

  • ES5 Object에 함수가 추가됨

    • 메소드는 하나도 없음 - 추가된 메소드가 없다는 뜻
      전부 함수만 추가되었습니다.

  • 빌트인 Object 오브젝트의 모든 메소드는 (즉, prototype에 연결되어있는 6개의 메소드를 말함)

    • 대부분의 빌트인 오브젝트(String, Number, Array…)에 첨부됨
    • 빌트인((String, Number, Array…))으로 오브젝트를 생성하므로 연결이 많이 발생
      빌트인 Object 오브젝트의 prototype의 6개의 메소드가 연결되다는 뜻입니다.
      그렇다고 toString, valueOf 등등의 메소드가 모든 오브젝트에서 다 쓰이나?
      그런 것도 아닙니다.
      결국 이는 loss입니다.
      빌트인 오브젝트를 만들 때마다 빌트인 Object 오브젝트로 연결하는 경로를 계속 생성하다보면, 이는 메모리를 많이 쓰므로 분명한 낭비, 손실입니다.
      이런 이유 때문에 전부 함수만 추가되었습니다.

String이나 Number에 메소드가 추가되는 것은 괜찮다고 봅니다.
그것들은 각자의 것에서만 쓰이기 때문입니다.
하지만 빌트인 Object 오브젝트는 모든 오브젝트에 들어갑니다.


  • 함수는 첨부되지 않으므로

    • 연결 부하를 줄일 수 있음 - 효율성 증가

ES5 Object 함수

이름개요
defineProperty()프로퍼티 추가, 프로퍼티 속성 변경
defineProperties()다수의 프로퍼티 추가, 속성 변경
getPrototypeOf()prototype에 연결된 프로퍼티 반환
getOwnPropertyNames()프로퍼티 이름을 배열로 반환 (내가만든 프로퍼티 이름)
keys()열거 가능한 프로퍼티 이름 반환
getOwnPropertyDescriptor()디스크립터 속성 반환
preventExtensions()프로퍼티 추가 금지 설정
isExtensible()프로퍼티 추가 금지 여부 반환
seal()프로퍼티 추가, 삭제 금지 설정
isSeal()프로퍼티 추가, 삭제 금지 여부 반환
freeze()프로퍼티 추가, 삭제/변경 금지 설정
isFrozen()프로퍼티 추가, 삭제/변경 금지 여부 반환

ES5에 새롭게 추가된 개념이 바로 위의 속성개념입니다.
enumerable 한번 들으셨던 적 있죠?
열거할 수 있느냐, 없느냐. <- 이러한 것입니다.
이러한 것들이 속성인데요, 계속해서 이번장에서 다룰겁니다.


디스크립터라는 속성이 있다.
우리가 여태 다룬 것 중에는 enumerable이 있다.
일단은 이 정도로만 아시고 다음다음 페이지에서 다루겠습니다.

프로퍼티 디스크립터

6개의 디스크립터

이름개요
value[[Value]], 설정할 값
writable[[Writable]], 값 변경 가능 여부
false로 주면 값을 변경 못함
데이터를 보호하겠다는 의미
get[[Get]], 값 반환 프로퍼티 함수
getter라고 이야기함
set[[Set]], 값 설정 프로퍼티 함수
setter라고 이야기함
enumerable[[Enumerable]], 프로퍼티 열거 가능 여부
configurable[[Configurable]], 프로퍼티 삭제 가능 여부

위에서 getOwnPropertyDescriptor() 이거 있었죠?
이거 관련된 내용입니다.