zoukankan      html  css  js  c++  java
  • 关于JavaScript中bind、applay、call的区别

    在JavaScript中this的指向一直是一个困扰我们的问题,在JavaScript中this的指向是不固定的,但是我们可以通过使用bind()、call()、apply()来改变this的指向,但是在ES6中this的指向与之前的有所不同。

    箭头函数的this始终指向函数定义时的this而不是执行时,也就是始终指向箭头函数的外层,ES5中this的指向始终指向最后调用他的那个对象。

    • call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数
      语法:fun.call(thisArg, arg1, arg2, ...)
    var a ={
            name : "Cherry",
            fn : function (a,b) {
                console.log( a + b)
            }
        }
    
        var b = a.fn;
        b.call(a,1,2)     // 3
    
    • apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数.
      语法:
      func.apply(thisArg, [argsArray])
    var a ={
            name : "Cherry",
            fn : function (a,b) {
                console.log( a + b)
            }
        }
    
        var b = a.fn;
        b.apply(a,[1,2])     // 3
    
    
    • bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被bind的第一个参数指定,其余的参数将作为新函数的参数供调用时使用
    var a ={
            name : "Cherry",
            fn : function (a,b) {
                console.log( a + b)
            }
        }
    
        var b = a.fn;
        b.bind(a,1,2)()           // 3
    

    区别call()、apply()只有第二个参数不一样,apply的第二个参是数组,bind返回的是一个函数最后必须调用它。

  • 相关阅读:
    第五章:数组 结构体 和联合体
    第四章:用户自定义和枚举数据类型
    第三章:systemverilog文本值和数据类型
    阶段一:读几本经济学书
    第二章:systemverilog声明的位置
    数据结构-B树
    UDP的崛起
    vim使用
    sudo apt-get update
    计算机组成原理——浮点数表示方法
  • 原文地址:https://www.cnblogs.com/yuanchao-blog/p/11219352.html
Copyright © 2011-2022 走看看