JavaScript中允许指定函数中this的指向
① call()
② apply()
③ bind()
1、call()方法,传递的是普通参数
使用call方法调用函数,同时指定被调用函数中this的值
基础语法 :fn.call(thisArg, x, y, z, ....)
script>
const obj = {
name: '张三'
}
function fn() {
console.log(this) //{name: '张三'}
}
// call()方法中第一个参数是指定的this,其余是实参,传递的参数
// 这里将this指向了obj
fn.call(obj, 1, 2)
</script>
2、apply()方法,传递的参数必须是数组
使用 apply 方法调用函数,同时指定被调用函数中 this 的值
基础语法 :fn.apply( thisArg, [数组] )
<script>
function fn(x, y) {
return x + y
}
const num = fn.apply(null, [1, 2])
console.log(num) //3
// apply方法主要跟数组有关系,比如使用Math.max()求数组最大值和最小值
const arr = [1, 5, 14, 2]
const max = Math.max.apply(null, arr) //利用apply方法
const max2 = Math.max(...arr) //利用展开运算符
console.log(max, max2) //14 14
</script>
3、bind()方法
bind()方法不会调用函数,但是也能改变函数内部this的指向
当我们只想改变this的指向,并不想调用函数的时候,可以使用bind()方法 ,比如改变定时器内部的this指向
基础语法 :fn.bind( thisArg, x, y, z, ....)
<script>
const obj = {
uname: '张三'
}
// 普通函数
function fn() {
console.log(this);
}
// bind不会调用函数
// 能改变this的值
// 返回的值是一个函数
const fun = fn.bind(obj)
// 调用改变了this指向后的函数
fun() //{uname: '张三'}
</script>