zoukankan      html  css  js  c++  java
  • javascript 中的call 和apply的区别

    一直对call 和apply很模糊,今天终于搞懂了,分享出来给大家。

    apply call bind方法

    var ZS = {

      name:"张三",

      sex : "男",

      age : "25岁",

      say :function(){

           console.log(this.name+","+this.sex+",今年"+this.age)

      }

    }

    var LS = {

      name:"李四",

      sex : "女",

      age : "28岁"

    }

    ZS.say();  // 张三,男,今年25岁

    张三有个say 方法,可以console我的个人信息 。

    如何用张三的say方法显示李四的个人信息呢?

    ZS.say.apply(LS);  // 李四,女,今年28岁

    ZS.say.call(LS);  // 李四,女,今年28岁

    ZS.say.bind(LS)();  // 李四,女,今年28岁

    !注意 张三并没有把say给李四,李四根本没有say方法。

    如果直接写xw.say.bind(xh)是不会有任何结果的,看到区别了吗?

    call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。

    call 和apply的区别

    var WW = {

      name:"王五",

      sex : "男",

      age : "30岁",

      say :function(company,position){

           console.log(this.name+","+this.sex+",今年"+this.age+",目前就职于"+company+",职位是:"+position);

      }

    }

    var ZL = {

      name:"赵六",

      sex : "女",

      age : "33岁"

    }

    WW.say("阿里","web前端工程师");  //王五,男,今年30岁,目前就职于阿里, 职位是:web前端工程师

    通过call和apply让赵六也可以用这个say方法

    WW.say.call(ZL,"百度","canvas工程师");  // 赵六,女,今年33岁,目前就职于百度,职位是:canvas工程师(call后面的参数与say方法中是一一对应的);

    WW.say.call(ZL,"百度",["百度","canvas工程师"]);  // 赵六,女,今年33岁,目前就职于百度,职位是:canvas工程师(apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的)

  • 相关阅读:
    第一篇博文
    重拾javascript系列-JS声明详解之var
    重拾Javascript系列
    AtCoder DP Contest 26题
    DP题
    一众数论
    字符编码
    C# DateTime类型和sqlserver DateTime精度不同
    vs2015中的数据库架构对比工具(New Schema Comparison)
    SqlServer常用语句
  • 原文地址:https://www.cnblogs.com/webdugui/p/5457863.html
Copyright © 2011-2022 走看看