函数中的this是在运行时候决定的,而不是函数定义时
全局环境中的this指window
其他函数中的this指向调用它的对象
使用call和apply改变函数中this的具体指向
apply的参数需要放在一个数组里面
bind改变this指向 返回函数调用执行
三个方法都是原型上
Function.prototype.call()
Function.prototype.apply()
Function.prototype.bind()
改变this指向call和apply的使用方法
var bc = {
name: 'bc',
say: function (a, b, c, e, f, g) {
console.log(this.name, a, b, c, e, f, g)
}
}
var xy = {
name: 'xy',
say: function () {
}
}
bc.say.call(xy, 1, 2);
// 1. 立即执行
// 2. 第一个参数: 对象
// 3. 后面都是实参
apply()方法的应用 参数需要传入一个数组
var obj1 = {
name:'zhangsan',
returName:function(){
return this.name;
}
}
var obj2 = {
name:'lisimao',
returName:function(str){
return this.name+str;
}
}
console.log(obj2.returName.apply(obj1,['666']))
bind在使用形式上合上面两个call和apply一样只不过不立即调用,经常在定时器,或其他回调函数等不立即调用的函数改变this指向时使用
setTimeout(function(){}.bind(obj),1000);
该匿名函数在1000毫秒后调用,使用bind改变this指向又不立即调用,符合该使用场景