위 질문과 같은 질문입니다 [object Array]가 나오는이유
224
작성한 질문수 4
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]가 출력됩니다.
인스턴스에서 prototype 프로퍼티에 직접 접근해야하는 이유
0
59
1
setTimeout 에서 this
0
81
1
2강부터 영상이 나오지 않습니다.
0
175
1
자바스크립트 주석에 이상한 점이 있어서 문의드립니다.
0
221
2
return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.
1
259
1
클래스 static 멤버
1
253
1
실행컨텍스트와 스택프레임
2
567
1
프로토타입으로 상속할때 브릿지 사용 이유
0
320
1
호이스팅 관련 질문
1
335
1
책 66p. 예제 3-2 질문입니다.
0
356
1
강의 내용 10:58 캡슐화 질문입니다.
1
399
1
강의 내용 5:10 질문입니다.
1
422
2
전역 공간에서의 this
0
426
2
18:31 addEventListener의 this
1
480
1
outerEnvironmentReference 질문
1
372
1
실행 컨텍스트와 클로저에 대해 질문드립니다.
1
448
1
Object.prototype.constructor의 [[prototype]] ?
1
658
1
함수를 값으로 할당할 때
2
458
1
15:54 'ddd' 사라지는 오류?
4
375
1
프로토타입 getPrototypeOf(instance).constructor(n,a) 질문입니다.
1
406
1
기본형/가변형 질문입니당
0
334
0
선생님 그러면 섹션 0만 봐도 무방한가요!?
0
338
1
Hoisting과 environmentRecord에 관한 질문입니다.
1
294
1
안녕하세요, 데이터 변경 질문입니다.
0
330
1





