본문 바로가기

JOURNAL/TIL

210225

반응형

 

오늘 배운 내용들

 

  • 객체 리뷰
  • 객체 지향 자바스크립트
  • this 키워드
  • apply, call , bind

객체  지향 프로그래밍

jjy0821.tistory.com/14


 

실행에 따른 this의 바인딩 패턴

 케이스 this의 값
메소드 호출 실행 시점에서 부모인 객체
new 키워드를 이용한 생성자 호출 새롭게 생성된 인스턴스 객체
call 또는 apply 등에 의한 호출 첫 번째 인자로 전달된 객체

 화살표 함수는 this의 값에 대해 결정하지 않기 떄문에 함께 사용하지 않는다. 

 

Node에서 this는 무엇일까?

node에서는 this가 module.exports에 해당한다. module.exports = exports = this 라고 생각하자.

 

 


 

call, apply, bind

  매개변수 함수 표현  반환값
apply  첫 번째 인자는 this, 다음 인자로는 인수 배열 하나만 받는다. func.apply(thisArg, [argsArray]) 지정한 this 값과 인수들로 호출한 함수의 결과.
 
call 첫 번째 인자는 this, 다음 인자로는 인수의 목록을 받는다. func.call(thisArg[, arg1[, arg2[, ...]]]) this 와 arguments 를 매개로 호출된 함수의 반환값.
bind 메소드가 호출되면 새로운 함수를 생성하고, 첫 번째 인자의 value로 this 키워드를 설정 func.bind(thisArg[, arg1[, arg2[, ...]]]) 지정한 this 값 및 초기 인수를 사용하여 변경한 원본 함수의 복제본.

 

 만약 this의 값이 의미가 없는 경우라면, 첫 번째 인자에 null이 들어가면 된다. 만약 우리가 bind 메소드를 사용할 때, let something = func.bind(null, "anything") 과 같은 형태로 코드가 작성 되었다면 첫 번째 인자는 null이 되고 something은 func에 들어 갈 함수 자체를 반환하게 된다. 함수 내에 "anything"이 바인드 되어있다.

 


 

어려웠던 내용

  • apply나 call 등의 메소드를 사용할 때, 첫 번째 인자값이 this가 된다고 배웠는데, 첫번째 인수가 지정되지 않고 함수를 호출했을 경우에는 왜 undefined가 나오지 않는지 정확히 이해하지 못했다. 일단 관련된 내용을 mdn에서 검색했는데 strict mode에서는 this가 undefined가 된다고 했는데, 그렇지 않은 경우는 this의 값이 전역 객체에 바인딩 된다고 써 있다. (그리고 strict mode는 최적화를 위해 좀 더 엄격하게 문법을 체크하는 모드라 들었는데 구체적으로 어떤 개념인지 이것 역시 잘 파악이 안된다.) 오늘 했던 과제 중에 이 부분에 대해서 페어분이랑 가장 많이 고민했는데 이유를 너무 알아내고싶다..

 

 

  • 유사배열 개념에 대해서 아직 조금 헷갈린다. 유사배열이란 단어가 대체 무슨 소린가 싶었는데 Array-like Object라는 단어로 이해하니 그나마 좀 더 납득이 갔던 것 같다. 한 마디로 배열이 아닌데 배열인 척 하는 객체고 배열인지 Array.isArray()로 검사를 하면 결과가 false로 나온다. 따라서 유사 객체는 배열이 아니기 때문에 배열의 메소드를 쓸 수 없고 객체 내에 length란 프로퍼티가 반드시 존재해야하며 배열의 인덱스같이 프로퍼티의 키가 0, 1, 2 ... 와 같이 구성된다고 한다. 

 

 

 

반응형

'JOURNAL > TIL' 카테고리의 다른 글

210317  (2) 2021.03.17
210224  (0) 2021.02.24
210223  (0) 2021.02.23
210222  (0) 2021.02.22