zoukankan      html  css  js  c++  java
  • call、apply、bind的用法

    call、apply、bind的作用是为了改变函数运行时this的指向

    this就是当前行为执行的主体

    call

    call函数传入两个参数,第一个参数为对象,第二个及后面的参数用来传参。当第一个参数的列表为null或undefined时,默认指向window

    var arr = [1, 2, 3, 4, 5];
    var max = Math.max.call(null, arr[0], arr[1], arr[2], arr[3], arr[4])//89
    

    Eg:

    var obj = {
      message:"My name is:"
    }
    
    function getName(firstName,lastName){
      console.log(this.message + fisrtName + " " + lastName);
    }
    
    getName.call(obj,"Dot","Dolby");
    

    apply

    apply函数同样接收两个参数,第一个参数是要绑定的this的值,第二个参数是一个参数数组。当第一个参数为null、undefined的时候,默认指向window

    var arr = [1, 2, 3, 89, 46];
    var max = Math.max.apply(null,arr);
    

    apply传入的多个参数,会依次作为形参进入函数中,比如max函数无法处理一个数组,但却可以同时处理多个参数,这样就可以调用了。看看下面的例子

    Eg:

    var obj = {
    	message:"My name is:"
    }
    function getName(firstName,lastName){
      console.log(this.message,firstName + " " + lastName);
    }
    getNmae.apply(obj,["Dot","Dolby"]);
    

    bind

    bind函数也可以传入多个参数,指向要绑定的this的值。但值得注意的是,bind不会直接执行。需要使用括号调用才可以

    Eg:

    				 var obj = {
                msg: "this is a message"
            }
            function getName() {
                console.log(this.msg)
            }
    
            getName.bind(obj)();
    

    如果我们只用getName.bind(obj);是不会被调用的,只是绑定了this

  • 相关阅读:
    ASP.NET MVC Ajax下载文件(使用NPOI向现有的excel模板文件里面添加数据)
    Devexpress MVC DateEdit 设置默认的Time
    SQL 行转列(列的值不规则的数目)
    靶机Cyberry
    PHP-Audit-Labs-Day1
    DASCTF七月赛两道Web题复现
    靶机BlackMarket
    靶机CH4INRULZ_v1.0.1
    Kali中John的使用方法
    虚拟机中桥接模式和NAT模式以及仅主机模式的区别
  • 原文地址:https://www.cnblogs.com/seanxushuo/p/11477975.html
Copyright © 2011-2022 走看看