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返回的是一个函数最后必须调用它。

  • 相关阅读:
    开源包管理系统和环境管理系统 Conda
    浅谈 Python 的模块导入
    用 pytest 测试 python 代码
    关于特征筛选中的IV值
    二 k-means聚类算法的手动实现
    二 统计量及其抽样分布
    PAT B1056组合数的和
    PAT B1061判断题
    'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
    Hadoop搭建高可用的HA集群
  • 原文地址:https://www.cnblogs.com/yuanchao-blog/p/11219352.html
Copyright © 2011-2022 走看看