apply에서 this 질문입니다
위와 같이 실행했을때 forEach 내부의 this 빼고는 전부 apply의 첫번째 인자인 myDiner가 출력되었는데 forEach 내부에서는 강의에서 말씀하신 대로 윈도우가 출력되었습니다.
그리고 map 함수도 arrow function이 아닌 일반 함수로 바꿔서 실행해봤는데 map 내부에서도 윈도우 객체를 출력하게 되었습니다.
1) 이 결과를 해석해보면 apply에서 첫번째 인자로 넘겨준 객체는 콜백함수 내부의 this까지는 영향을 미치지 않는다고 보면 될까요??
2) map 함수는 두번째 인자로 this를 줘도 적용이 되지 않는데 두번째 인자로 this를 주는 방식은 forEach에서만 적용되는 건가요?
回答 1
1
안녕하세요 좋은 질문 감사합니다~
// 1) 이 결과를 해석해보면 apply에서 첫번째 인자로 넘겨준 객체는 콜백함수 내부의 this까지는 영향을 미치지 않는다고 보면 될까요??
- this의 대상은 함수가 어떻게 호출되느냐에 따라 달라집니다. 만약 어떠한 객체의 메서드로 함수가 호출된다면 this는 객체를 가르킬 것이고, call 이나 bind, apply를 이용하여 this가 가르키는 대상을 변경해 줄 수도 있습니다. 말씀하신 forEach문 안의 콜백함수를 실행시키는 객체는 window 객체이기 때문에 window를 가르킨다고 보시면 되겠습니다.
// 2) map 함수는 두번째 인자로 this를 줘도 적용이 되지 않는데 두번째 인자로 this를 주는 방식은 forEach에서만 적용되는 건가요?
- 앗 아닙니다. map에서도 forEach 처럼 this를 동일하게 변경할 수 있습니다. 아래 예제에서 map의 두번째 인자인 this를 살펴보시기 바랍니다.
function menuGlobal(item1, item2){
var val = [item1, item2].map(function(item){
return item + " " +this.name
}, this);
console.log(val);
}
var myDiner = {
name : "goood!"
}
menuGlobal.apply(myDiner, ["hi", "there"]);
이상입니다.
답변이 도움이 됐으면 좋겠습니다. 감사합니다!
<div id="banner">배너 이미지</div> 관련 질문
0
3
1
강의자료
0
16
1
윈도우에서 Node js를 설치하고 싶어요
0
22
0
addToFile function에서 path를 사용해 새로운 파일을 생성
0
35
1
[46강] EventEmitter를 활용한 10가지 패턴 중 플러그인 아키텍처
0
31
2
강의가 누락된것 같습니다.
0
38
2
용어 발음법이 계속 바뀌는 것 같은데 이런 부분들 개선이 가능할까요...?
0
48
1
counter01.html은 어디있을까요?
1
16
1
존재하지 않는 일기 url입력 시 alert이 두 번 떠요
0
42
1
useState 직접 구현 부분에서 질문이 있습니다.
1
46
1
학습을 하고 블로그에 정리를 해도 괜찮을까요?
1
45
1
교재(3쇄)와 강의 내용 문의
0
39
2
섹션2번 부분 강의 화면이 잘 못된것 같아서 문의합니다.
0
24
1
call stack 표현이 잘못표현된것이 아닌가요?
0
83
2
prototype.constructor 를 꼭 설정해주어야 하는 이유가 뭔가요?
0
255
0
생성자 함수와 클래스 중 어느 것을 사용하는게 효율적인가요?
1
242
1
클로저 파트 마지막 예시에 관해 질문있습니다.
1
267
1
이벤트 위임관련...
1
258
1
let, const에서의 호이스팅에 대해서...
2
279
1
생성자 함수관련...
2
229
1
function과 arrow function 관련
1
288
1
객체 공장장, <생성자> 편에 잘못된 내용이 있는것 같습니당
1
246
1
동영상강의에서 사용했던 코드 공유 부탁드립니다.
1
198
1
생성자 내에 함수 선언
2
326
2

