this指向改变的三种方法
1、call方法
(1)可以调用函数;
(2)可以改变函数内的this指向;
function Father(uname,age,sex) {
this.uname = uname;
this.age = age;
this.sex = sex;
}
function Son(uname,age,sex) {
Father.call(this,uname,age,sex);
}
2、apply方法
fun.apply(thisArg,[argsArray])
thisArg:在fun运行时指向的this值
argsArray:传递的值,必须包含在数组里面
返回值就是函数的返回值,因为它就是调用函数
3、bind方法
bind()方法不会调用函数,但是可以改变函数内部的this指向
fun.apply(thisArg,arg1,arg2...)
thisArg:在fun运行时指向的this值
arg1,arg2:传递的其它参数
如果有的函数我们不需要立即调用,但是又想改变这个函数内部
this指向,此时需要用bind
btn.onclick = function() {
this.disabled = true;//在这里this指向的时btn这个按钮
setTimeout(function() {
this.disabled = false;
}.bind(this),3000)//this则会指向btn这个对象
}
4、call、apply、bind相同点以及不同点
(1)相同点:
都可以改变函数内部的this指向
(2)区别:
call和apply会调用函数,并且改变函数的内部的this指向;
call和apply参数参数的方式是不一样的,call参数是以罗列的方式传递,apply参数是以数组的方式传递;
bind不会调用函数,可以改变函数内部this指向;
5、各自的应用场景
call经常做继承;
apply经常与数组有关;
bind不调用函数,但是可以改变this的指向,比如改变定时器内部this的指向;