• JavaScript 中 call()、apply()、bind() 的用法


    1 myFun定义在window中

    myFun=function(who){
    console.log("name is:"+who)
    }
    var who1="dog"
    var who2="sheep"
    this.myFun.call(this,who1)  //输出:name is dog
    myFun.call(this,who2)       //输出:name is sheep

    myFun   who1 who2都是在window中定义的,myFun的第1个参数this指向window,第2个参数才是函数本身定义的参数。

    2  myFun定义在obj1中

    var obj1={
       name:'dog',
       myFun:function(where){
    console.log("name is:"+this.name + "出生在"+where)
    }
    }
    obj1.myFun.call(obj1,"北京")  //name is:dog出生在北京
    var obj2={
      name:'sheep',
    }
    obj1.myFun.call(obj2, "上海")   //name is:sheep出生在上海
    obj1.myFun.apply(obj2, ["上海"])
    obj1.myFun.bind(obj2, '上海')

    可将上述代码复制到chrome console中查看运行结果。

    结论:

     call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
        call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面  obj.myFun.call(db,'成都', ... ,'string' );
        apply的所有参数都必须放在一个数组里面传进去  obj.myFun.apply(db,['成都', ..., 'string' ]);
        bind除了返回是函数以外,它 的参数和call 一样。
        
        当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等等!

    参考:https://www.cnblogs.com/Shd-Study/p/6560808.html

  • 相关阅读:
    Oracle第五周测验
    软件测试第五周
    Oracle第四周作业
    c++第二章测试
    软件测试第四章
    软件测试 第三章
    Centos 安装.NET Core环境
    .net core 集成极光推送
    Swagger添加文件上传测试
    linux firewall
  • 原文地址:https://www.cnblogs.com/pu369/p/12464332.html
Copyright © 2020-2023  润新知