call(),apply(), bind() 메서드
앞서 설명하였던 기본적인 this 바인딩 3가지 방법 외에도
메서드를 이용하여 임의적으로 특정 객체에 바인딩 시키는 방법이 3가지 존재한다.
1) apply() 메서드
- apply은 파라미터 중 첫 번째 인자를 함수 내부에서 사용할 this로 만들어준다.
1
2
3
4
5
6
7var Name = function(name){
this.name = name;
}
var objName = {}
Name.apply(objName,['sim']);
console.log(objName);
//{ name: 'sim' }
2) call() 메서드
- call은 apply와 기능은 같지만, 두번째 매개변수가 배열이 아닌 각각의 값으로 넘길 수 있다.
1
2
3
4
5
6
7
8var Name = function(name,age){
this.name = name;
this.age = age;
}
var objName = {}
Name.call(objName,'sim',31);
console.log(objName);
//{ name: 'sim', age: 31}
3) bind() 메서드 ※ es5 문법
- 함수가 가리키는 this만 바꾸고 호출하지는 않음.
- 새 함수를 만드는데 그 this는 bind에 전달된 값.
1
2
3
4
5
6
7
8
9
10
11window.color = "red";
var example = { color : "blue"};
function colorValue() {
console.log(this.color);
}
colorValue();
var bindColor = colorValue.bind(example);
bindColor();
// red
// blue
colorValue 함수의 this는 window 이므로 red 가 출력되고
colorValue에 example 을 bind 해줄시 this가 example 객체를 가리키므로
this.color 값은 blue가 된다.