[코어 자바스크립트] obj.values()가 아닌 Object.values(obj)인 이유

소이뎁·2023년 7월 9일
0
post-thumbnail

🌈 인프런의 코어 자바스크립트(정재남) 수강 후, 이해한 내용을 정리한 글입니다.

Object.prototype은 모든 객체의 Prototype Chain 최상단에 존재한다.

아래의 그림에서 constructor에는 개발자가 정의한 것(ex.Person)뿐만 아니라 JavaScript에 내장된 Number, String, Array, Function, Boolean, Date 등도 들어갈 수 있다.

Date를 예시로 들어보자.

아래와 같은 그림으로 표현할 수 있다.

Date.prototype에 내장된 getDate(), getDay()와 같은 Date 전용 메서드들처럼, Object도 Object만을 위한 메서드들이 존재한다. 예를 들면 assign(), keys(), values() 등이 그것이다. 하지만 이것들을 Object.prototype 안에 저장하면

new Date().values()

Prototype Chain을 통해 위와 같은 코드도 실행할 수 있게 돼버린다.

따라서 Object만을 위한 메서드는 Object.prototype가 아닌 Object(constructor)에 존재한다.

이러한 이유로 values()와 같은 Object 전용 메서드는 Prototype Chain을 타고 obj.values()로 접근할 수 없고, Object.values(obj)로 접근해야 한다.

3줄 요약

  • Object.prototype은 모든 객체의 Prototype Chain 최상단에 존재한다.
  • 그러므로 Object.prototype에 Object 전용 메서드를 두면 의도하지 않은 코드가 실행될 수 있다.
  • 따라서 Object 관련 메서드들은 Object(constructor)에 존재한다.

0개의 댓글