• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

위 질문과 같은 질문입니다 [object Array]가 나오는이유

19.01.14 16:08 작성 조회수 128

0

arr.toString을 join("-")등을 넣어줘서 개조를 해도

arr.proto.toString.call(arr) 을 하면 1,2,3이 나오는이유는 이전 강의에서 말씀하신것처럼 this를 arr로 바인딩 해줬기 때문이라고 생각을 합니다. (언더바언더바는 입력해도 여기나오지않네요)

궁금한점은,

toString함수가 Object의 프로토타입에 정의되어있으니

arr.proto.toString 과 arr.proto.proto.toString는 같은 toString함수인데,

call을 이용해서 arr로 binding을 하면 동일하게 1,2,3이 나와야하지않나요??

[object Array]이 나오는 이유를 여쭤봐도될까요?

두 출력결과가 다른이유는 arr.proto.toString함수와 arr.proto.proto.toString가 다르다고 생각하면될까요?

toString함수는 Object.prototype에 정의되어있는게 맞는데 그걸 그대로상속안하고 Array.prototype.toString으로 재정의해주었다고 보면되는건가요?

답변 1

답변을 작성해보세요.

3

강의영상의 어디쯤에서 이 질문을 하신것인지 알 수 없어 질문 내용만을 바탕으로 답변 드리겠습니다.

Array.prototype.toString은 배열의 요소를 출력하는 메소드이고,

Object.prototype.toString은 [Object Constructor] 와 같이 생성자함수명을 출력하는 메소드입니다.

arr.__proto__.toString

은 Array.prototype.toString과 같습니다.

따라서

arr.__proto__.toString.call(arr)

을 하면, arr에 Array.prototype.toString을 적용하므로 1, 2, 3이 출력됩니다.

한편 다음도 성립합니다.

arr.__proto__.__proto__.toString === Array.prototype.__proto__.toString

Array.prototype.proto.toString === Object.prototype.toString

arr.__proto__.__proto__.toString.call(arr) === Object.prototype.toString.call(arr)

 

즉 arr에 Object.prototype.toString을 적용하므로 [Object Array]가 출력됩니다.