JavaScript Deep Dive 16~18

harbour·2022년 6월 27일
0

숨 참고 Deep Dive ~

목록 보기
6/8
post-thumbnail

6.24 금 ch.16 ~ 18

Ch.16 프로퍼티 어트리뷰트

내부 슬롯과 내부 메서드

내부 슬롯과 내부 메서든느 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다.

-> [[...]]으로 감싼 이름들이 내부 슬롯과 내부 메서드

프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체

자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다. 프로퍼티의 상태란 값, 값의 갱신 가능 여부, 열거 가능 여부, 재정의 가능 여부를 말한다.

프로퍼티 어트리뷰트는 자바스크립트 엔진이 관리하는 내부 상태 값인 내부 슬롯 [[value]], [[Writable]], [[Enumerable]], [[Configurable]]이다. 따라서 프로퍼티 어트리뷰트에 직접 접근할 수 없지만 Object.getOwnPropertyDescriptpr 메서드를 사용하여 간접적으로 확인은 가능하다.

데이터 프로퍼티와 접근자 프로퍼티

데이터 프로퍼티 - 키와 값으로 구성된 일반적인 프로퍼티, 지금까지 살펴본 모든 프로퍼티는 데이터 프로퍼티
접근자 프로퍼티 - 자체적으로는 값을 갖지 않고 다른 데이터 프로퍼티의 값을 읽거나 저장할 때 호출되는 접근자함수로 구성된 프로퍼티

Ch.17 생성자 함수에 의한 객체 생성

Object 생성자 함수

new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환한다. 빈 객체를 생성한 이후 프로퍼티 또는 메서드를 추가하여 객체를 완성할 수 있다.

생성자 함수

객체 리터럴에 의한 객체 생성의 문제점

객체 리터러에 의한 객체 생성 방식은 직관적이고 간편하나 단 하나만의 객체만 생성한다. 동일한 프로퍼티를 갖는 객체를 여러 개 생성해야 하는 경우 매번 기술해야하기 때문에 비효율적이다

생성자 함수에 의한 객체 생성 방식의 장점

생성자 함수에 의한 객체 생성 방식은 마치 객체(인스턴스)를 생성하기 위한 템플릿(클래스)처럼 생성자 함수를 사용하여 프로퍼티 구조가 동일한 객체 여러 개를 간편하게 생성할 수 있다.

생성자 함수의 인스턴스 생성 과정

생성자 함수의 역할은 프로퍼티 구조가 동일한 인스턴스를 생성하기 위한 템플릿(클래스)으로서 동작하여 인스턴스를 생성하는 것과 생성된 인스턴스를 초기화(인스턴스 프로퍼티 추가 및 초기값 할당)하는 것이다.

Ch.18 함수와 일급객체

일급 객체란?

  1. 무한의 리터럴로 생성할 수 있다. 즉 런타임에 생성이 가능하다
  2. 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
  3. 함수의 매개변수에 전달할 수 있다.
  4. 함수의 반환값으로 사용할 수 있다.
// 1. 함수는 무명의 리터럴로 생성할 수 있다.
// 2. 함수는 변수에 저장할 수 있다.
// 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.
const increase = function (num){
  return ++num;
};

const decrease = function (num){
return --num;
};

// 2. 함수는 객체에 저장할 수 있다.
const auxs = {increase, decrease};

// 3. 함수의 매개변수에 전달할 수 있다.
// 4. 함수의 반환값으로 사용할 수 있다. 
function makeCounter(aux) {
let num = 0;
  
  return function() {
  num = aux(num);
    return num;
  }
}

// 3. 함수는 매개변수에게 함수를 전달할 수 있다.
const increaser = makeCounter(auxs.increase);
conseole.log(increaser()); //1

함수 객체의 프로퍼티

arguments 프로퍼티

함수 객체의 arguments 프로퍼티 값은 arguments객체다. arguments객체는 함수 호출 시 전달된 인수(argument)들의 정보를 담고 있는 순회 가능한 유사 배열 객체이며, 함수 내부에서 지역 변수처럼 사용된다. 즉 함수 외부에서는 참조할 수 없다.

caller 프로퍼티

caller프로퍼티는 함수 자신을 호출한 함수를 가리킨다.
표준화 될 예정도 없는 프로퍼티므로 사용은 x

length 프로퍼티

함수 객체의 length프로퍼티는 함수를 정의할 때 선언한 매개변수의 개수를 가리킨다.

name 프로퍼티

함수 객체의 name 프로퍼티는 함수 이름을 나타낸다.
익명 함수 표현식 경우 ES5에서는 반 문자열을 값으로 갖는다.
ES6에서는 함수 객체를 가리키는 식별자를 값으로 갖는다.

proto접근자 프로퍼티

모든 객체는 [[Prototype]]이라는 내부 슬롯을 갖는다. [[Prototype]] 내부 슬롯은 객체 지향 프로그래밍의 상속을 구현하는 프로토타입 객체를 가리킨다.
proto프로퍼티는 [[Prototype]] 내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티다. 내부 슬롯에는 직접 접근할 수 없고 간접적인 접근 방법을 제공하는 경우에 한하여 접근할 수 있다.

prototype 프로퍼티

prototype 프로퍼티는 생성자 함수로 호출할 수 있는 함수 객체, constructor만이 소유하는 프로퍼티다. 일반 객체와 생성자 함수로 호출할 없는 non-constructor에는 prototype 프로퍼티가 없다.

profile
Onion on Sale

0개의 댓글