this를 통해 함수를 다른 객체에서도 재사용할 수 있다.
function playerGlobal() {
console.log("좋아하는 선수는 " + this.name )
}
var mount = {
name: 'mason mount',
display : playerGlobal
}
var kante = {
name: 'ngolo kante',
display : playerGlobal
}
일반적으로 this 값은 자동 할당되지만 call, apply, bind는 this를 제어하기 위해 사용된다.
function playerGlobal(item) {
console.log("좋아하는 선수는 " + item + this.name )
}
function playerGlobal(item1, item2) {
[item1, item2].forEach(function(el) {
console.log('좋아하는 선수는' + el + this.name)
},this);
}
var mount = {
name: 'mason mount',
display : playerGlobal
}
var kante = {
name: 'ngolo kante',
display : playerGlobal
}
playerGlobal.call(mount,"chelsea's ")
// "좋아하는 선수는 chelsea's mason mount"
playerGlobal.call(kante,"귀여운 ")
// "좋아하는 선수는 귀여운 ngolo kante"
playerGlobal.apply(mount, ['멋진 ', '잘생긴 '])
// "좋아하는 선수는 멋진 mason mount"
// "좋아하는 선수는 잘생긴 mason mount"
function playerGlobal(item) {
console.log("좋아하는 선수는 " + item + this.name )
}
var mount = {
name: 'mason mount'
}
var kante = {
name: 'ngolo kante'
}
var playerGlobalBind = playerGlobal.bind(mount)
console.log(playerGlobalBind('멋진 '))
// "좋아하는 선수는 멋진 mason mount"
화살표 함수의 this는 일반적인 this처럼 함수를 호출한 객체를 할당하지 않고, 바로 상위 스코프의 this를 할당한다.
function playerGlobal(item1, item2) {
[item1, item2].forEach(function(el) {
console.log('좋아하는 선수는' + el + this.name)
},this);
}
function playerGlobal(item1, item2) {
[item1, item2].forEach((el) => {
console.log('좋아하는 선수는' + el + this.name)
});//this를 따로 인수로 넣어줄 필요가 없다.
}
call과 apply는 this에 할당되는 객체를 지정할 수 있다.