JS中的call、apply、bind方法详解

在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。
JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。

call()  apply()

对于 apply、call 二者而言,作用完全一样,只是接受参数的方式不太一样 (apply的第二个参数是数组,call第二个参数查看如下第二个例子)。

// apply
  function test () {
    console.log(this.name)
  }
  var obj1 = {
    name: '测试1'
  }
  var obj2 = {
    name: '测试2'
  }
  test.apply(obj1)   // 输入测试1
  test.apply(obj1)   // 输入测试2

 

// call
  var arr = [1,2,3];
  Array.prototype.push.call(arr,6,7,8);  //参数是一个一个传的
  console.log(arr);                      //[1, 2, 3, 6, 7, 8]

 

bind()

bind方法和apply、call的作用也是差不多的,不同的是 apply、call 这两个方法是立即执行函数。

 // bind
  let obj1 = {
    name:'测试1'
  }
  let obj2 = {
    name:'测试2'
  }

  function test(){
      console.log(this.name);
  }

  let play = test.bind(one);  //这里并不会立即执行
  play();                     //所以 可以将这个方法 放到需要的地方 在执行

 

posted @ 2019-12-09 10:23  幻城love  阅读(520)  评论(0编辑  收藏  举报