JavaScript 的apply,call和bind

JavaScript 的apply,call和bind

  • 每个函数都包含两个非继承而来的方法:apply(), call().

    • 这个两个方法的用途都是在特定的作用域中调用函数实际上等于设置函数体内的this对象的值。

    • apply() 方法接受两个参数

      • -个是在其中运行函数的作用域,也就是this
      • 另一个是参数数组。这个数组可以是Array的实例,也可以是arguments对象
    • call() 方法与 apply()方法的作用相同,区别仅在于接受参数的方法不同

      • call() 方法第一个参数是一样是this,变化的是其余参数都直接传递给函数。在使用call()方法时,传递给函数的参数必须逐个列举出来
    • apply() 和 call() 方法的真正用处是可以拓展函数赖以运行的作用域,而扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系

      window.color = 'red';
      var o = {
      color: 'blue'
      }
      function saycolor() {
          console.log(this.color);
      }
      
      saycolor() // red
      sayColor.call(this)  //red, 因为在全局下的this默认是window || global
      saycolor.call(window)  //red
      saycolor.call(o)   //clue
      
  • ES5中还定义了一个方法: bind().

    • bind() 方法会创建一个函数的实例,这个函数实例的this值会被绑定到传给 bind() 函数的值
    window.color = 'red';
    var o = {
        color: 'blue'
    }
    
    function saycolor() {
        console.log(this.color);
    }
    
    var objectsaycolor = saycolor.bind(this)
    objectsaycolor();    //blue
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。