一般函数中的this指向的是函数的调用者
但也可以用一些方法来改变函数中的this指向
1.call(改变的this指向,参数1,参数2)
2.apply(改变的this指向,[参数1,参数2])
3.bind(改变的this指向,参数1,参数2)
他们都可以改变this的指向
但是call和apply会立即调用函数,bind不会调用函数,会返回一个新的函数的拷贝
call和apply传递的参数不同,apply的参数必须是数组。
var o = {
name:"musedash",
}
var fn = function(){
console.log(this);
}
var fn2 = function(arr){
console.log(this);
console.log(arr);
}
fn.call(o);
fn2.apply(o,['musedash']);
var arr = [1,2,35,67,43];
var max = Math.max.apply(Math,arr);//不需要改变this指向时可以用null作为第一个参数
console.log(max);
var fncc = fn.bind(o);
fncc();
console.log(fncc);
//案例:有一个按钮,点击后禁用次按钮,3秒后重新启用
// var btn = document.getElementById("go");
// btn.onclick = function(){
// this.disabled = true;
// setTimeout(() => {
// this.disabled = false;
// }, 3000);
// }
// btn.onclick.bind(btn)
var btns = document.querySelectorAll("button");
for(var i = 0 ; i < btns.length ; i++)
{
btns[i].onclick = function(){
this.disabled = true;
setTimeout(
/*() => {
this.disabled = false;
}*/
function(){
this.disabled = false;
}.bind(this)
,3000);
}
}