在Js中,this的指向有时候会需要修改,修改的方法有call(),apply(),bind()。
相同点:三者都可以改变函数内部的this的指向。
不同点:
- call和apply会调用函数,并且改变函数内部的this指向。
- call和apply传递的参数不一样,call传递参数aru1,aru2,,形式。而apply必须用数组的形式[arg]。
- bind 不会调用函数,但可以改变函数内部的this指向。
主要的应用场景:
- call经常被用作继承。用来继承父函数的属性。
- apply经常跟数组有关系,比如借助数学对象实现数组的最大最小值等。
- bind 不调用函数,但还是可以改变this的指向。所以但我们不想立刻调用函数但是想修改其中的this的指向问题时,我们就可以使用bind。比如改变定时器内部的this指向。
var btn = document.querySelector('button');
btn.onclick = function() {
this.disabled = true;
setTimeout(function() {
this.disabled = false;
}.bind(this), 3000)
}