call方法
fall和apply方法都是函数的方法,可以用函数或方法调用它们
(1)可以改变this指向
function fn(){
// this指向window
console.log(this);
}
fn()
毫无疑问this肯定指向window,输出查看
接下来调用call方法
<body>
<div class="app">我是div</div>
<script>
function fn(){
// this指向window
console.log(this);
}
let div = document.querySelector('div');
fn.call(div)
</script>
</body>
可以看到此时this指向了div元素 ==> call可以改变this指向,也可以将两个毫无关系的元素建立联系
(2) call也可以让一个元素调用另一个元素的方法
注意:这里让兔子调用了狗的方法,在call方法中后边的a和b是需要传的值,若不传值直接调用,结果为undefined
let rabbit = {
name:'小了白了兔'
}
let dog = {
eat(a,b){
console.log('我爱吃',a + '和'+ b);
}
}
dog.eat.call(rabbit,'萝卜','青菜')
apply方法
apply方法的作用与call方法一致,不同的地方就是传值的方式
方式:要以数组的方式进行传值
dog.eat.apply(rabbit,['萝卜','青菜'])
bind方法
bind方法的作用同样与call方法一致,不同的是:它会将结果return,return一个函数
let fun = dog.eat.call(rabbit,'萝卜','青菜')
console.log(fun)
此时fun输出的结果与调用call方法的结果一致