<script>
let obj={
name:'Levi',
age:20
}
test() //调用test函数,输出this,这里指向Window
function test(){
console.log(this) // Window
}
</script>
call()
和apply()
-
这两个方法都是函数对象的方法,需要通过函数对象来调用
-
在调用
call()
和apply()
可以将一个对象指定为第一个参数(如下为obj),此时这个对象(obj)将会成为函数执行时的thiscall()
方法可以将实参在对象之后依次传递apply()
方法需要将实参封装到一个数组中传递
<script>
let obj={
name:'Levi',
age:20
}
test.call(obj,1,2,3) //修改this指向对象obj, 传实参 1,2,3
//test.apply(obj,[1,2,3]) //修改this指向对象obj, 传参需封装成数组
function test(){
console.log(this) //this指向obj,输出obj内容
console.log(arguments) //查看当前接受参数 Arguments(3) [1, 2, 3]
}
</script>
bind()
bind()
除了是返回一个函数,其余和call()
一样
<Script>
let obj={
name:'Levi',
age:20
}
test.bind(obj,1,2,3)() //调用test函数,利用bind方法修改this指向obj,并传参1,2,3
/*
//bind 返回一个新函数,所以这里可以新声明一个变量接收返回函数
let test2 = test.bind(obj,1,2,3)
test2()
*/
function test(){
console.log(this) // obj
console.log(arguments) //Arguments(3) [1, 2, 3]
}
</Script>
小结
-
都是为了改变this指向
-
使用
apply()
和bind()
方法会立即执行函数,而bind
方法返回一个新函数(需自行调用) -
bind()
除了是返回一个函数,其余和call()
一样