call、apply、bind 的用法分别是什么?


1. call()

* call(this,a1,a2,a3,...)

* call方法,可以指定函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数。

call的第一个参数就是this所要指向的那个对象,后面的参数则是函数调用时所需的参数。


      function add(a, b) {

      return a + b;

      }

      add.call(this, 1, 2)  // 3

例:

      var n =111;

      var x = { n: 222 };

      function f() {

      console.log(this.n);

      }

      f(x) //111

      f.call(x)  //222

  2. apply

* 与call类似,改变this指向,再调用函数

* 区别: 接收一个数组作为函数执行时的参数

* func.apply(this,[a1,a2,a2,a3,...])

      var a = { n: 2 };

      function f(x,y) {

      return x + y* this.n ;

      }

      f.call(a,1,2)  //5 

      f.apply(a,[1,2])  // 5

 3. bind()

* bind 方法用于将函数体内的 this 绑定到某个对象,然后返回一个新函数。

* bind 与 call 类似,接受参数相似。但是bind生成一个新函数,call直接调用

      var add = function (x, y) {

        return x * this.m + y * this.n;

      }

      var obj = {

        m: 2,

        n: 2

      };

      var xxx = add;

      xxx.call(obj,1,2)  //6

      var yyy = add;

      yyy.apply(obj,[1,2])  //6

      var Add= add.bind(obj);  //此时改变 this 指向了obj对象,生成一个函数

      Add(1,2)    //6     

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容