JavaScript

JavaScript中call()、apply()、bind()

2019-10-20  本文已影响0人  西瓜鱼仔

call()、apply()、bind() 都是用来改变this指向的。

关于this 详解,可以看我另一篇文章JavaScript中this 的详解
首先看如下代码:

  <script>
    var student = {
      name:'小明',
      showName:function () {
          console.log(this.name)
      }
    };
    var a = {
      name:'小暗'
    };

    student.showName();
    student.showName.call(a);
    student.showName.apply(a);
    student.showName.bind(a)();

  </script>
最后打印结果为:

由此可见,call()、apply()、bind()都改变了函数中this 的指向,让this指向了对象a。


call()

call() 方法的第一个参数是this所要指向的那个对象,如果设为null或undefined或者this,则等同于指定全局对象。
第一个参数后面是函数调用时需要传递的参数。

 function b(a, b) {
      console.log(a + b);
    }

 b.call(null, 1, 2); // 打印结果为:3

call 后面传递的参数是以逗号的形式分开的。

apply()

apply 方法的第一个参数也是this所要指向的那个对象,如果设为null或undefined或者this,则等同于指定全局对象。
第二个参数则是一个数组,该数组的所有成员依次作为参数,在调用时传入原函数。

 function b(a, b) {
      console.log(a + b);
    }

 b.apply(null, [3, 4]); // 打印结果为7

bind()

bind 方法返回的是一个函数形式,如果要执行,则后面要再加一个小括号,例如:bind(obj,参数1,参数2)()
传递的第一个参数是this所要指向的那个对象,后面参数只能以逗号分隔形式,不能是数组形式。

 function b(a, b) {
      console.log(a + b);
    }

 b.bind(null, 3, 4)(); // 打印结果为7
上一篇下一篇

猜你喜欢

热点阅读