오늘은 몸이 안좋아서 재택근무를 진행했다. 나는 출근을 해서 살짝 텐션이 있는 상태에서 작업하는것을 선호하기 때문에 재택근무가 가능함에도 꼭 사무실에 가서 코딩을 하곤 했다.
그렇게 첫 재택근무 후기는 아래와 같다.
Function.prototype.call()
call()
메서드는 주어진 this
값 및 각각 전달된 인수와 함께 함수를 호출한다.
아래 예제에서 살펴보자.
let obj = {
string: 'zero',
yell: function() {
alert(this.string);
}
};
let obj2 = {
string: 'what?'
};
obj.yell(); // 'zero';
obj.yell.call(obj2); // 'what?'
위 예제를 보면 마지막 줄에 obj.yell.call(obj2)
를 보면, this가 가리키는 것을obj에서 obj2로 바꾸었다.
즉, this를 대체하여 obj.yell
메서드를 호출한 것이다. 당연히 obj의 yell 메서드의 this.string
은 'zero'다. 하지만 this가 가리키는 것을 obj2의 this
로 바꿔서 this.string
이 'what?'이 되었다.
자세하게는 살펴보지 않았지만, 자주 사용하면 좋은 코드가 될 것 같지는 않다.
Function.prototype.bind()
bind()
메서드는 call()
의 기능에서 호출만 빠진것이라고 생각하면 좋다.
아래 예제에서 살펴보자.
let obj = {
string: 'zero',
yell: function() {
alert(this.string);
}
};
let obj2 = {
string: 'what?'
};
let yell2 = obj.yell.bind(obj2);
yell2(); // 'what?'
obj.yell.bind(obj2)
를 진행하면 어떨것 같은가?
yell
메서드의 this
는 obj2를 가리키게 된다. 즉 call()
과 비슷하지만 호출만 하지 않는 것이다.
call(this, 1, 2, 3)
은 bind(this)(1, 2, 3)
과 같다.