16장 프로퍼티 어트리뷰트
JS 엔진은 프로퍼티를 생성할 때, 프로퍼티의 상태를 나타내는 어트리뷰트를 기본값으로 자동정의한다.
데이터프로퍼티
- [[ value ]] : 프로퍼티 키를 통해 값에 접근하면 반환되는 값이다. 없으면 프로퍼티를 동적으로 생성, 저장
- [[ wirtable ]] : 값의 변경 가능 여부를 불리언으로 나타낸다.
- [[ enumerable ]] : 값의 열거기능 여부를 불리언으로 나타낸다. fase시 열거불가 (Object.keys 등등..)
- [[ configurable ]] : 프로퍼티의 재정의 여부를 불리언으로 나타낸다.
접근자프로퍼티
- [[ get ]] : 데이터 프로퍼티의 값을 읽을때 호출되는 접근자함수. geter의 함수가 호출
- [[ set ]] : 데이터의 프로퍼티의 값을 저장할때 호출되는 접근자함수. setter 함수가 호출
- [[ enumerable ]] : 데이터 프로퍼티 enumerable와 동일
- [[ configurable ]] : 데이터 프로퍼티 configurable 동일
객체변경방지
Object.defineProperty, Object.definePropertys 메서드를 이용하여 프로퍼티의 어트리뷰트를 재정의 할 수 있음.
JS엔진에서 제공하는 객체변경방지 메서드3가지
1. Object.preventExtensions : 객체 확장금지 : 프로퍼티 추가 금지
2. Object.seal : 객체 밀봉 : 추가, 삭제 금지, 어트리뷰트 재정의 금지
3. Object.treeze : 객체 동결 : 읽기만 가능
=> 위의 메서드는 얕은 변경만 방지할 수 있다. 중첩변경 방지를 위해서는 불변 객체를 사용해야 한다.
17장 생성자 함수
new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수를 말한다.
장점 : 인스턴스를 생성하기 위한 템플릿 (클래스)처럼 사용가능 하다.
단점 : 객체 리터럴에 비해, 직관적이고, 간편하지 못함.
생성자 함수 인스턴스 생성과정 :
1. 인스턴스 생성과 this 바인딩 (JS엔진이 암묵적 생성)
2. 인스턴스 초기화 : 런타임 시점에,인수로 전달받은 초기값을 인스턴스 프로퍼티에 할당하여 초기화
3. 인스턴스 반환 : 바인딩된 this가 암묵적으로 반환됨. (return => 생략)
18장 함수와 일급 객체
일급 객체의 정의
- 무명의 리터럴로 생성할 수있다. 즉, 런타임에 생성이 가능하다.
- 변수나 자료구조에 저장할 수 있다.
- 함수의 매개변수에 전달할 수 있다.
- 함수의 반환값으로 사용할 수 있다.
함수와 객체의 차이
- 함수는 호출이 가능, 객체는 불가능
- 함수는 객체보다 공통 프로퍼티가아닌 고유프로퍼티가 존재(arguments)
- arguments : arguments 객체는 함수 호출 시 전달된 인수들의 정보를 담고 있는 순회가능한 유사배열 객체이다.
- caller : 함수 자신을 호출한 함수를 가르킨다.
- length: 함수를 정의할때, 선언한 매개변수의 개수
- name : 함수의 이름
물론 고유 프로퍼티말고 접근제어자를 상속받은 것도잇음.
__proto__ 접근제어자 프로퍼티 : 모든 객체 [ [ Prototype ] ] 이라는 내부 슬롯이 가르키는 프로토타입에 접근 하기 위해 사용하는 접근자 프로퍼티다.