console.log

[모던 자바스크립트 Deep Dive] 19 장 Self Quiz 본문

개발공부/JavaScript

[모던 자바스크립트 Deep Dive] 19 장 Self Quiz

foresight 2023. 8. 25. 18:41

1. 함수 객체의 prototype 프로퍼티에 대한 설명으로 옳은 것은?

① 함수 객체는 모두 prototype 프로퍼티를 소유하고 있다.

② 일반 객체는 모두 prototype 프로퍼티를 소유하고 있다.

proto접근자 프로퍼티와 prototype 프로퍼티는 동일한 프로토타입을 가리킨다.

proto접근자 프로퍼티와 prototype 프로퍼티는 동일한 사용 주체를 가리킨다.

proto접근자 프로퍼티와 prototype 프로퍼티는 동일한 사용 목적을 가진다.


정답
③번.
① 생성자 함수로서 호출할 수 없는 함수, non-constructor인 화살표 함수와 메서드 축약 표현으로 정의한 메서드는 prototype 프로퍼티를 소유하지 않으며 프로토타입도 생성하지 않는다.
② prototype 프로퍼티는 생성자 함수로서 호출 할 수 있는 함수 객체만 소유하고 있다.
③ 둘 다 프로토타입의 참조를 가리킨다.
④ 
__proto__ 접근자 프로퍼티 : 모든 객체 
prototype 프로퍼티 : 생성자 함수
⑤ 
__proto__ 접근자 프로퍼티 : 객체가 자신의 프로토타입에 접근 혹은 변경하기 위해 사용
prototype 프로퍼티 : 생성자 함수가 생성할 객체의 프로토타입을 할당하기 위해 사용

2. 다음은 객체 생성 방식과 프로토타입의 결정에 관한 내용이다. 올바르지 않은 것은?

① 객체 생성 방식 5가지(객체 리터럴, Object 생성자 함수, 생성자 함수, Object.create 메서드, 클래스(ES6))는 모두 추상 연산 OrdinaryObjectCreate에 의해 생성된다.

② OrdinaryObjectCreate 메서드는 인수로 전달받은 프로토타입을 자신이 생성한 객체의 [[Prototype]] 내부 슬롯에 할당한 다음 생성한 객체를 반환한다.

③ 사용자 정의 생성자 함수와 더불어 생성된 프로토타입은 다양한 빌트인 메서드를 갖고있다.

④ 프로토타입에 프로퍼티를 추가하면 프로토타입 체인에 즉각 반영된다.

⑤ OrdinaryObjectCreate는 필수적으로 자신이 생성할 객체의 프로토타입을 인수로 전달받는다.


정답
③ 사용자 정의 생성자 함수와 더불어 생성된 프로토타입의 프로퍼티는 constructor 뿐이다.

3. 다음 중 프로토타입 체인에 대한 설명으로 올바르지 않은 것은?

① 프로토타입 체인은 상속과 프로퍼티 검색을 위한 메커니즘이다.

② 프로토타입 체인의 최상위에 위치하는 객체는 언제나 null 이다.

③ 프로토타입의 종점에서 프로퍼티를 검색할 수 없는 경우 undefined를 반환한다.

④ 스코프체인과 프로토타입 체인은 서로 협력하여 식별자와 프로퍼티를 검색한다.

⑤ 객체의 프로퍼티 접근 시 접근하려는 프로퍼티가 없으면 [[Prototype]] 내부 슬롯 참조를 따라 부모역할을 하는 프로토타입의 프로퍼티를 순차적으로 검색하는 것을 '프로토타입 체인'이라고 한다.


정답

② 프로토타입 체인의 최상위에 위치하는 객체는 언제나 Object.prototype 이다.


4. 다음과 같은 person 객체가 존재할 때 출력 결과 중 다른 결과를 도출하는 것은?

const person = {
  name: "Lee",
  address: "Seoul",
  __proto__: { age: 20 },
};

for (const value of Object.values(person)) {
  // ①
  console.log(value);
}

for (const i in person) {
  // ②
  console.log(person[i]);
}

Object.values(person).forEach((v) => console.log(v)); // ③

for (let i = 0; i < Object.values(person).length; i++) {
  // ④
  console.log(Object.values(person)[i]);
}

정답
② for...in 문은 객체의 프로토타입 체인 상에 존재하는 모든 프로토타입의 프로퍼티 중에서 프로퍼티 어트리뷰트 [[Enumerable]]의 값이 true인 프로퍼티를 순회하며 열거한다.
> Lee
> Seoul
> 20