TIR: 완벽가이드 1. 코어자바스크립트(2) 객체 / 프로퍼티 속성, 객체 속성, 객체 메소드 - 220623

Lumpen·2022년 6월 22일
0

TIL

목록 보기
66/242

객체

프로퍼티 속성

프로퍼티 속성에는 이름과 값 말고도
writerble, enumerable, configureable이 있다

  • writerble: 프로퍼티 값의 변경 가능 여부
  • enumerable: 프로퍼티가 열거될 수 있는지 여부
  • configurable: wtiterble, enumerable 속성의 변경 가능 여부

객체 속성

모든 객체는 prototype, class, extensible 속성을 가진다

prototype

prototype은 프로퍼티를 상속하는 객체를 지정한다
매우 중요하다

prototype 속성은 객체 생성 시점에 설정된다
객체 리터럴로 생성 시 Object.prototype을 객체의 프로토타입으로 설정

new를 사용해 만들면 생성자 함수의 prototype 프로퍼티 값이 prototype 속성의 값이 된다

Object.create() 메소드로 만든 객체는 메소드의 첫 번쨰 인자가 prototype의 속성 값이 된다

new 표현식으로 생성된 객체는 일반적으로 생성자 함수를 참조하는
constructor 프로퍼티를 상속 받는다

책의 나중에 생성자 함수가 왜 객체의 프로토타입을 결정하는 데 있어 전적으로 신뢰할 방법이 아닌지에 대해서 나온다니..

객체 리터럴이나 Object.create()로 생성된 객체는
Object()의 생성자를 constructor 프로퍼티로 갖는다
constructor.prototype은 객체 리터럴에 대해서는 정확한 프로토타입을 참조하지만 Object.create()의 경우는 그렇지 않다는데.. 왜그런거지

prototype 속성은 __proto__ 프로퍼티에 노출되고 있다
이 프로퍼티로 프로토타입을 직점 검사하고 수정할 수 있다
하지만 __proto__는 오페라, 파이어폭스에서 제한적이기 때문에
이식성이 떨어진다

class 속성

객체의 class 속성은 객체 타입에 대한 정보를 담고 있는 문자열이다
읽기 전용이고, 값을 질의하는 것도 아주 간접적으로만 가능하다
Object.prototype으로부터 상속되는 toString() 메소드는
객체의 타입을 문자열로 반환한다

따라서 객체의 클래스 정보를 보기 위해서는 toString()을 호출하면 되지만
많은 객체들이 toString()을 오버라이드 해서 사용하기 때문에
Function.call() 메소드를 사용해 classof() 함수를 만들어 사용한다

function classof(obj) {
  if(!ojb) return
  return Object.prototype.toString.call(obj).slice(8, -1);

이 함수는 어떠한 값을 넣어도 동작한다

extensible 속성

객체에 새 프로퍼티를 추가할 수 있는지의 여부를 결정

객체 직렬화

객체 직렬화는 개체를 문자열로 변환하는 과정
문자열은 나중에 객체로 복원할 수 있음

JSON.stringify()로 직렬화
JSON.parse()로 복원

객체 메소드

모든 객체는 Object.prototype을 상속 받는다
상속된 프로퍼티들은 대부분 메소드이고, 어느 객체에서나 사용 가능
때문에 매우 중요함

다음은 유용한 전역 객체 메소드로 재정의 할 수 있음

toString()

인자를 받지 않고 호출 대상 객체의 값을 어떻게든 문자열로 반환한다
자바스크립트는 객체를 문자열로 변환할 때 항상 toString()을 사용한다

  • 연산자로 객체와 문자를 연결하거나 등에서 사용됨
    기본 Object.toString()은 가장 상위의 toString()인데 별 정보가 없다
    때문에 많은 클래스가 오버라이딩 해서 사용함
    Array.toString(), Date.toString(), Function.toString() 등의 항목을 살펴보면 좋다고 한다

toLocaleString()

모든 객체는 toLocaleString() 메소드를 가지고 있다
객체의 지역화된 문자열 표현을 반환한다

객체에 기본적으로 정의된 toLocaleString()는 단순히 toString() 결과를 반환하지만 Date와 Number 클래스는 숫자와 날짜, 시간의 지역화된 형식을 출력하기 위해 맞춤형 toLocaleString()를 재정의 하고있다
배열에서의 toLocaleString()은 toString()과 동일하지만
배열 각 원소의 toLocaleString() 메소드를 호출한다

toJSON()

Object.prototype에는 정의되어 있지 않다
JSON.stringify() 메소드가 동작할 때 직렬화 하려는 객체에 toJSON()이 있는지 먼저 찾고, 있을 경우 toJSON()의 결과 값이 원래 객체 대신 직렬화 된다
Date.toJSON()을 참고하면 된다고 함

valueOf()

toString()과 매우 유사하지만
자바스크립트가 객체를 숫자와 같은 원시타입으로 변환하려 할 때 호출된다
객체가 원시 타입 값을 필요로 하는 문맥 안에서 사용될 때 호출됨
valueOf() 메소드는 변환 작업을 하진 않는다
Date.valueOf()는 자신만의 메소드를 정의 함

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글