gw.web
192
2019-07-18 16:25:13
9
367

Javascript apply call 메서드 질문드립니다.


mdn 문서에는

Function의 메소드라고 정의 되어있는데


Function의 property중 aguments 유사배열객체를

배열의 메서드로 사용하려 할때


function example(){

console.log(Array.prototype.join.call(agruments));

}

위 처럼 Array의 prototype에서 call을 호출하는(?) 느낌인데..


정확한 정의가 궁금합니다..


0
0
  • 답변 9

  • 초코쪼꼬
    6k
    2019-07-18 16:35:06

    @gw.web 음.. call은 말그대로 호출을 하는겁니다.


    Array 객체에 join이라는 method가 있죠.


    간단한 예제를 보여드리면 


    var arr = [1,2,3,4];

    console.log(arr.join()); // => "1,2,3,4"


    위의 join과 같은게 Array.prototype.join 입니다.

    위 예제에서 arr은 이미 Array객체이고 바로 join을 사용하였죠.

    그런데 Array.prototype.join.call(arguments)에서 arguments가 array로 올지 string일지 알수가 없는거죠?


    그렇기 때문에 선으로 Array객체에 있는 join이라는 method를 불러놓고 사용자가 호출할때 받는 arguments를 join에 적용하겠다라는겁니다.


    ** arguments가 뭔지 알고 계신다는 가정하에 답변을 적었습니다.

    0
  • gw.web
    192
    2019-07-18 16:38:37

    초코쪼꼬


    어..음 그러니까 제 질문은

    Call과 apply는 function 의 메소드인데


    Array.prototype.join.call()와 같이

    왜 Function.prototype이 아닌 array.prototype을 이용해서

    사용이 가능한지 궁금합니다!!

    0
  • 초코쪼꼬
    6k
    2019-07-18 16:41:09

    @gw.web 아..


    자.. Array 의 prototype을 보시면 join은 무슨 타입인가요?

    0
  • gw.web
    192
    2019-07-18 16:46:12
    초코쪼꼬

    어떤 타입이냐는 말씀은..
    Array의 property인가요?
    0
  • 초코쪼꼬
    6k
    2019-07-18 16:47:17

    @gw.web prototype을 보는 방법은 아시죠?


    설명을 드리려면 우선 이걸 아셔야 다음 답변이 가능한데..

    0
  • 초코쪼꼬
    6k
    2019-07-18 16:50:13 작성 2019-07-18 16:50:56 수정됨

    @gw.web


    browser하나 띄우시고 개발자도구 열어서 Array.prototype만 console 창에 작성해보세요.


    그러면 return으로 object을 뱉어낼겁니다. prototype은 Object type이니까요.


    거기하위에 join이라는 method가 있죠. 아까도 말씀드렸지만 join은 method입니다. 그러하기 때문에 join의 type은 Function입니다.


    다시 처음으로 돌아가서 Array.prototype.join.call(arguments)이 가능한 이유는


    typeof Array.prototype.join == "function" 이고 call은 Function의 method이기 때문에 사용이 가능한거죠.

    0
  • gw.web
    192
    2019-07-18 16:58:29

    초코쪼꼬


    감사합니다. 어느정도 이해가 되었습니다!

    0
  • 초코쪼꼬
    6k
    2019-07-18 17:01:13

    @gw.web


    우선 Prototype을 하나 만들어보세요. 그러다보면 응용에 대해서도 이해가 쉬울겁니다.

    0
  • 컴포지트
    996
    2019-07-18 17:23:19 작성 2019-07-18 17:24:09 수정됨

    제가 보기엔 .call() 메소드에 대한 궁금증 같은데, 먼저 레퍼런스를 보시겠습니다.

    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/call


    call 의 첫번째 인자는 참조 객체입니다. arguments 는 유사배열 맞죠.

    즉, Array.prototype.join.call(arguments) 호출하면 " Array 객체의 동적 메소드 join 을 arguments 참조로 호출하라" 라는 뜻이 됩니다.

    내용은 네이티브라 못보지만, this를 활용하고 그 this 는 arguments가 되어 처리할 겁니다.

    더 짧게도 가능합니다.


    console.log([].join.call(arguments));


    빈 배열의 join 메소드 "함수"를 호출하지만, call 로 참조를 바꿔치기 하기 때문에 빈 배열이 아닌 arguments가 되어버리는 거죠.


    이 개념을 깊개 파려면 "Javascript 의 Context"를 이해해야 합니다. this 의 이해라고 해도 됩니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.