js 中有关 this 的指向应用(1)
当使用 forEach 或 setTimeout 方法时,里面的 function 是回调函数,这个时候回调函数的 this 总是指向 window 的,那么想要使用声明定义函数的那个变量域中的参数时,就没有办法使用,例如下面这种情况
var obj1 = {
myName: 'hjc',
fruits: ['apple','banana','icecream'],
fn(){
this.fruits.forEach(function(item){ //遍历 fruits 数组中的元素
console.log(this.myName+'喜欢'+item) //这里的 this 指向 window
}
)
}
}
obj1.fn()
通过箭头函数捕获作用域中的 this 来改变指向
var obj1 = {
myName: 'hjc',
fruits: ['apple','banana','icecream'],
fn(){
this.fruits.forEach((item) => { //遍历 fruits 数组中的元素
console.log(this.myName+'喜欢'+item) //这里的 this 指向 obj1
}
)
}
}
obj1.fn()
通过 bind 绑定 this 指向
var obj1 = {
myName: 'hjc',
fruits: ['apple','banana','icecream'],
fn(){
this.fruits.forEach(function(item){ //遍历 fruits 数组中的元素
console.log(this.myName+'喜欢'+item) //这里的 this 指向 obj1
}.bind(this)
)
}
}
obj1.fn()