call,apply,bind方法

353 阅读1分钟

call方法

fall和apply方法都是函数的方法,可以用函数或方法调用它们

(1)可以改变this指向

function fn(){
        // this指向window
        console.log(this);
      }
fn()

毫无疑问this肯定指向window,输出查看

image.png 接下来调用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>

image.png

可以看到此时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,'萝卜','青菜')

image.png

apply方法

apply方法的作用与call方法一致,不同的地方就是传值的方式

方式:要以数组的方式进行传值

dog.eat.apply(rabbit,['萝卜','青菜'])

bind方法

bind方法的作用同样与call方法一致,不同的是:它会将结果return,return一个函数

let fun = dog.eat.call(rabbit,'萝卜','青菜')
console.log(fun)

此时fun输出的结果与调用call方法的结果一致