p. 182~201 상위 클래스의 인스턴스를 활용하여 상속을 하는 경우에는 문제가 있다. 클래스가 구체적인 데이터를 지니지 않게 하기 위한 방법. 1. 일단 만들고, 프로퍼티를 모두 지우고, 얼린다. (Object.freeze()) 2. 더글라스 크락포트가 제시한 방법. 빈 Bridge 생성자 함수를 둔다. 3. Object.create() 핵심은 불필요한 인스턴스 프로퍼티가 남아있지 않게 하는 것. 위 방법 모두 constructor는 복구해줘야 한다. Subclass.prototype.constructor가 SubClass를 바라보도록. ES5에서의 super 흉내내기. 1. 부모의 생성자 함수 호출 2. 필드 접근 3. 메소드 접근 ES6에서 class가 나오고 이와 같은 동작을 하기..
p.169~181 프로토타입 체인의 최상단에는 항상 Object.prototype이 존재한다. 따라서 객체 전용 메서드를 만들려면 정적 메서드로 만들어야 했다. 다중 프로토타입 체인. 상위 생성자 함수의 인스턴스를 바라보게 한다. ES6 클래스, 인스턴스. 스태틱 멤버, 인스턴스 멤버, 프로토타입 메서드.
p.133~168 Object.freeze() 메소드로 객체 변경 방지. 부분 적용 함수, 디바운스. 커링 함수, 하나의 인자만 받는 함수로 나눈다. 프로토타입. 생성자 함수를 new 연산자와 호출하면 인스턴스가 생성되고, 인스턴스의 __proto__는 생성자 함수의 prototype 참조. __proto__는 생략 가능. constructor 프로퍼티는 변경이 가능하다. 프로토타입 체인, 메소드 오버라이드.
p.77~132 콜백 함수 호출 시 this binding. 생성자 함수 내부에서의 this. apply, call, bind. 화살표 함수는 스코프체인상 가장 가까운 this에 접근. 콜백 함수, 다른 코드의 인자로 넘겨주는 함수. 제어권을 넘겨준다. 콜백 헬, 이벤트 처리나 비동기적인 작업. ES6 Promise, Generator. ES2017 async/await. 클로저, 실행 컨텍스트가 종료되더라도, 참조가 되고 있어 가비지 콜렉터의 대상이 되지 않고 메모리에 남겨진 변수의 집합. null, undefined를 할당하여 참조 카운트를 0으로 만든다. 콜백함수 내부에서 외부 데이터 사용, 정보 은닉.
p.36~76 실행 컨텍스트 - 코드를 실행할 때 필요한 환경 정보들을 모아 놓은 객체. 콜 스택에 쌓인다. 전역 공간, eval, 함수, 블록으로 생길 수 있다. variable environment(snapshot), lexical environment, this binding environment record, outerEnvironmentReference 호이스팅, 자바스크립트 엔진은 평가 후 실행 함수 선언문, 함수 표현식의 호이스팅 차이 스코프, 스코프 체인, outerEnvironmentReference this는 객체지향 언어에서 클래스로 생성한 인스턴스 객체를 가리킨다. JS에서는 함수를 호출할 때 결정. 전역공간 this -> 전역 객체 일반함수 호출 this -> 전역 객체 메..
p.22~35 불변 객체를 만드는 법. immutable.js, immer.js와 같은 라이브러리 혹은 deep copy, JSON.stringify-JSON.parse 얕은 복사(shallow copy)시에는 객체의 프라퍼티 값이 객체라면 주소값을 복사해서 문제가 생길 수 있다. 뎁스가 하나라면, 스프레드 연산자, object.assign() 활용. undefined와 null. undefined는 자바스크립트 엔진이 지정하는 값. 변수 선언만 있을 때, 존재하지 않는 프로퍼티 접근, return 없는 함수. null은 개발자가 의도적으로 값이 없음을 드러내는 것. typeof null은 object.
~p.22 1회독을 했던 책인데 얕게 공부했던 것 같아 다시 펼쳐보게 됐다. 데이터 타입 - 기본형, 참조형 변수와 식별자. 변수는 변할 수 있는 수, 식별자는 데이터를 식별하는 데 사용하는 이름, 변수명. 변수와 상수에서는 변수 영역의 값이 변할 수 있는지, 불변성을 얘기할 때는 데이터 영역의 값이 변할 수 있는지 기본형, 참조형 복사. 모두 주소값을 복사하지만 참조형은 데이터 영역도 주소 값을 갖고 있기 때문에 방식이 다르다. 불변 객체.
p.71~83 프레임워크 없이 만드는 렌더링 엔진. 레지스트리 작성 방법과 가상 DOM 알고리즘. 변경이 발생하게 만드는 것이 이벤트. YAGNI 원칙. 실제로 필요할 때 구현하라. DOM 이벤트 API on + event, addEventListener 캡처 단계, 목표 단계, 버블 단계.