instanceof 연산자
- 좌변은 객체를 가리키는 식별자, 우변에는 생성자 함수를 가리키는 식별자를 피연산자로 받는다.
- 우변이 함수가 아닌 경우 TypeError
- 불리언 값은 반환받는다
- 프로토타입의 constructor 프로퍼티가 가리키는 생성자 함수를 찾는게 아니라, 생성자 함수의 prototype에 바인딩딘 객체가 프로토타입 체인 상에 존재하는지 확인하는 것
- Constructor에 영향을 받지 않는다.
직접 상속
Object.create에 의한 직접 상속
- Object.create메서드는 프로토타입을 지정하여 새로운 객체를 생성한다.
- new 연산자 없이 객체 생성 가능
- 프로토타입을 지정하여 객체 생성 가능
- 객체 리터럴에 의해 생성된 객체도 상속받을 수 있다.
- 프로토타입 체인의 종점에 위치하는 객체는 Object.prototype의 빌트인 메서드를 사용할 수 없으므로 Object.prototype의 빌트인 메서드를 객체가 직접 호출하는 것은 권장하지 않는다.
- Function.prototype.call 메서드와 같이 간접적으로 호출하는 것이 좋다.
객체 리터럴 내부에서 __Proto__에 의한 직접 상속
- ES6에서 부터 객체 리터럴 내부에서 접근자 프로퍼티를 사용하여 직접 상속 구현 가능
정적 프로퍼티와 메서드
- 정적 프로퍼티/메서드는 인스턴스를 생성하지 않아도 참조/호출 가능.
- 생성자 함수가 생성한 인스턴스로 참조/호출할 수 없다.
- 참조/호출할 수 있는 프로퍼티/메서드는 프로토타입 체인 상에 존재해야 한다.
- this를 사용하지 않는다면 그 메서드는 정적 메서드.
- 표기법만으로도 정적 프로퍼티/메서드와 프로토타입 프로퍼티/메서드를 구별할 수 있어야 한다. (p.305)
프로퍼티 존재 확인
- in연산자로 프로퍼티 존재 확인 가능. 반환값은 불리언 값이다.
- ES6에 도입된 Reflect.has 메서드를 사용할 수도 있다. in과 동일하게 동작.
- Object.prototype.hasOwnProperty메서드를 이용해 특정 프로퍼티가 존재하는지 확인할 수 있다. 반환값은 불리언 값.
프로퍼티 열거
for…in 문
- 객체의 프로퍼티 뿐 아니라, 상속받은 프로토타입의 프로퍼티까지 열거한다.
- [[Enumerable]]값이 true값일 때 열거한다.
- 따라서 객체의 프로토타입 체인 상에 존재하는 모든 프로토타입의 프로퍼티 중 프로퍼티 어트리뷰트 [[Enumerable]]값이 true인 프로퍼티를 순회하며 열거하는 것.
- 심벌은 열거하지 않는다.
- 상속받은 프로퍼티를 제외하려면 Object.prototype.hasOwnProperty를 사용하여 객체 자신의 프로퍼티인지 확인하면 된다.
- 대부분의 브라우저는 순서를 보장하지만, 무조껀 순서를 보장해주진 않으니 주의해야 한다.
- 배열에선 for …in문 보다 forEach, for …of문을 사용하는 것이 권장된다.
'기술 서적 > 하루 30분 모딥다' 카테고리의 다른 글
하루 30분 모던 자바스크립트 딥 다이브 this (0) | 2023.07.04 |
---|---|
하루 30분 모던 자바스크립트 딥 다이브 빌트인 객체 (0) | 2023.06.29 |
하루 30분 모던 자바스크립트 딥 다이브 프로토타입2 (0) | 2023.06.26 |
하루 30분 모던 자바스크립트 딥 다이브 프로토타입1 (0) | 2023.06.22 |
하루 30분 모던 자바스크립트 딥 다이브. 함수와 일급 객체 (0) | 2023.06.21 |