JavaScript提供了call、apply、bind这三个方法,来切换/固定this的指向
call
函数实例的call方法,可以指定函数内部this的指向(函数执行时所在的作用域)。
call方法的参数,应该是一个对象,如果 参数为空、null、undefined则默认传入全局对象
call的第一个参数就是this所以指向的那个对象,后面的参数则是函数调用时所需的参数
func.call(thisValue, arg1, arg2, ...)
apply
apply方法的作用与call类似,也是改变this指向,然后再调用该函数。唯一区别就是,它接收一个数组作为函数执行时的参数,使用格式如下
func.apply(thisValue, [arg1, arg2, ...])
第一个参数:和call一样,如果设为null、undefined则指定为全局对象
第二个参数: 是一个数组,该数组的所有成员依次作为参数,转入原函数。原函数的参数,在call方法中必须一个个添加,在apply方法中,必须以数组形式添加
bind
bind方法用于将函数体内的this 绑定到某个对象,然后返回一个新函数。
bind
bind还可以接受更多参数,将这些参数绑定原函数的参数
Function.prototype.bind(thisArg[, arg1[, arg2[, ...]]])
bind最需要注意的是结合回调函数使用
bind与call/apply的区别
相同点: 都可以改变函数执行的上下文环境
不同点:bind不立即执行函数,一般用在在异步调用和事件;call/apply:立即执行函数。
网友评论