728x90


이 함수를 사용한 곳으로 가보았습니다.

이때의 this를 호출해 보았습니다.

정상적으로 this가 호출이 되네요. call메서드를 사용해서 this를 넘겨줍시다.


정상적으로 기능이 작동 하면서 this도 잘 출력이 됩니다.
Call 메서드
메서드의 호출 주체인 함수를 즉시 실행하도록 하는 명령
이때 call메서드의 첫 번째 인자를 this로 바인딩하고 이후의 인자들을 매개변수로 사용합니다.
const obj = {
a:1,
method: function(x,y){
console.log(this.a, x, y)
}
}
obj.method(2,3) // 1, 2, 3
obj.method.call({ a:4 }, 5, 6) // 4, 5, 6
apply 메서드
call 메서드와 동일 하지만 첫 번째 인자를 제외한 나머지 모든 인자들을 배열로 받습니다.
const func = function(a,b,c){
console.log(this, a, b, c)
}
func.apply({x:1}, [4,5,6]) // {x: 1} 4, 5, 6
const obj = {
a: 1,
method: function(x,y) {
console.log(this.a, x, y)
}
}
obj.method.apply({a: 4}, [5,6]) // 4, 5, 6
bind 메서드
call과 비슷하지만 즉시 호출하지않고 넘겨 받은 this 및 인수들을 바탕으로 새로운 함수를 반환하기만 하는 메서드
새로운 함수를 호출할 때 기존의 bind 메서드로 전달했던 인수들의 뒤에 이어서 전달합니다.
const func = function(a,b,c,d){
console.log(this,a,b,c,d)
}
func (1,2,3,4) // Window{} 1, 2, 3, 4
const bindFunc = func.bind({x:1})
bindFunc(5,6,7,8) // {x:1}, 5, 6, 7, 8
내 프로젝트에서는

이렇게 사용할 수 있다.
arrowfunction

arrow function만으로도 해결할 수 있다.
그냥 function과 arrow function의 차이점
arrow function 내부에서 this는 전역 객체가 아닌 부모 객체인 obj를 가리키기 때문입니다.
단 사용해서는 안되는 경우도 있습니다.
var obj = {
names: ["seo"],
text: "님 안녕하세요",
print: () => { console.log(this.text) } // undefined
}
obj.print()
객체의 메소드를 화살표 함수로 선언할 경우 this는 전역 객체를 가리키므로 주의해야 합니다.
이 외에도 화살표 함수는 prototype 속성이 없으며 new 연산자로 생성 될 수 없다는 특징이 있습니다.
var Name = () => {}
console.log(Name.prototype)// undefined
var name = new Name() // TypeError: Name is not a constructor728x90
'오류모음' 카테고리의 다른 글
| [Error Handling] 카카오 로그인 시 owner를 판단 못하는 에러 (0) | 2022.03.10 |
|---|---|
| [Error Handling] window is not defined nextjs (0) | 2022.03.10 |
| [Error Handling] state를 너무 많이 업데이트 할 경우 에러 (0) | 2022.03.10 |
| [Error Handling] 로그 아웃상태시 방 만들기를 했을 때 401에러 (0) | 2022.03.10 |
| [Error Handling] next.js에서 클릭시 애니메이션을 생성 방법 (0) | 2022.03.10 |