자바스크립트 핵심 가이드 정리
객체
자바스크립트에서 단순한 데이터 타입(Primitive data type)은 숫자, 문자열, 불리언, null, undefined가 있다.
단, 여기서 숫자와 문자열 그리고 불리언은 메소드가 존재하기에 유사 객체라고도 할 수 있으며 Immutable 성격을 지닌다.
즉, 단순 데이터 타입 이외의 다른 값들은 객체라고 말한다.
자바스크립트에서 말하는 객체란?!
- 변형 가능한 속성들의 집합이라고 할 수 있다.
- 배열, 함수, 정규 표현식 또한 객체이다.
- 이름과 값이 있는 속성들을 포함하는 컨테이너라고 할 수 있다.
- 속성의 이름은 문자열이면 모두 가능하다.(빈문자열도 포함)
- 속성의 값은 undefined를 제외한 자바스크립트에서 사용되는 모든 값이 사용 될 수 있다.
- 자바스크립트의 객체는 클래스가 필요 없다. (Class-free)
- 객체는 참조 방식으로 전달 되며, 복사 되지 않는다.
프로토타입(prototype)
- 모든 객체는 속성을 상속하는 프로토타입 객체에 연결되어 있다.
- 객체 리터럴로 생성되는 모든 객체는 자바스크립트의 표준 객체인 Object.prototype 객체에 연결 된다.
- 프로토타입 연결은 값의 갱신에 영향을 받지 않습니다. 즉, 객체를 변경하더라도 객체의 프로토 타입에는 영향이 없다.
- 프로토타입 연결은 오로지 객체의 속성을 읽을 때만 사용한다.
- 해당 속성이 객체에 없는 경우 자바스크립트는 프로토타입 객체에서 찾고, Prototype chain의 가장 마지막에 있는 Object.prototype까지 계속해서 검색하며, 만약 존재 하지 않는 경우 undefined를 반환한다. 이런 내부 동작을 delegation 이라고 한다.
- 프로토타입 관계는 동적 관계로 새로운 속성이 추가되면, 해당 프로토타입을 근간으로 하는 객체들에 즉각적으로 적용이 된다.