一、this指向
this指向:可以简单理解为函数执行时,所在的“环境”
let obj = {
a: 2,
run: function () {
return this.a;
}
};
console.log(obj.run()); /// 2
run()所在的“环境”是在obj中花括号中,所以this指向obj
let a = 1;
let obj = {
a: 2,
run: function () {
return this.a;
}
};
console.log(obj.run()); /// 2
let f = obj.run;
console.log(f()); // 1
f()运行的环境是window,可以看成是window.f(),所以是1
二、箭头函数与this
箭头函数的this指向是被定死的,判断箭头函数this指向就是判断箭头函数外层的this指向
三、call
call(参数1,参数2,参数3...)
参数1是要填的this,剩余参数为函数实参,用逗号隔开
var a = 1;
var obj = {
a: 2,
run: function (value) {
return this.a+value;
}
};
var f = obj.run;
console.log(obj.run('你好'))
console.log(f.call(obj,'不好')) //2不好
call()方法改变了this指向
四、apply
apply(参数1,[参数2,参数3...]) 用法同call,但是剩余的参数必须放在数组中,参数之间用逗号隔开
五、bind
bind(参数1,参数2,参数3)
参数1:this 剩余的参数用逗号隔开
注意:bind返回的是一个函数,调用时必须在后面加一个括号