zoukankan      html  css  js  c++  java
  • 浅谈call和apply的联系&区别&应用匹配

      call和apply的联系和区别在之前查过资料了解了一番,昨天晚上睡不着觉忽然想到了这个问题,发现对于他们的联系和区别理解的还是很模糊。看来还是欠缺整理,知识没有连贯起来。反思一二,详情如下:

    1作用(联系)

    这两个方法都能够劫持另外一个对象的方法,继承另外一个对象的属性。就是借用别人的方法来做自己的事情。

    functionName.call(this, arg1,arg2,arg3)==functionName.apply(this, arguments)==this.functionName(arg1, arg2, arg3)

    2用法(区别)

    2.1用法和区别

      还得看 functionName.call(this, arg1,arg2,arg3)==functionName.apply(this, arguments)==this.functionName(arg1, arg2, arg3);

    看得出他们的作用是完全相同的,不同的只是参数的传递形式不同。

    call属于刘备的性格,窘迫之中不忘其从容淡定----喜欢一个一个的传递参数给借来的方法做参数(),而apply则是张飞的性格,急脾气,做事情慢不得----一个一个的传参真是愁煞人~好吧,我要把参数放在一个数组里,直接传数组岂不快哉?

    2.2情景再现:

    具体什么情况下使用apply,什么情况下使用call呢?

    在给对象参数的情况下,如果参数的形式是数组的时候,那最好使用apply;但是如果我们碰到类似要把一些不同的属性传参的时候,eg:Person.call(this,age,name,grde);那么使用call来传参无疑是不二首选,因为Person需要的不是一个数组。

    2.3 Skills in apply

    读完2.2后大家肯定会想那么一个问题,如果我们需要的是非数组参数,但是却使用apply传递了一个数组,这样会出现什么反应呢?

    答:张飞粗中有细,根据需要,把数组解析成了一个一个的参数。

    这一绝技如果用普通方法转换的话就得小费功夫了,so,apply可以效力数组转化~

    eg:  var max=Math.max.apply(null,arguments),同理适于求数组中最小数

    据说对于程序员简单的代码比任何语言都具有说法力,不知是不是真的:

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <script>
     7         function print(a,b,c,d){
     8             alert(a+b+c+d);
     9         }
    10         function test(a,b,c,d){
    11             print.call(this,a,b,c,d);
    12             print.apply(this,arguments);
    13             print.apply(this,[a,b,c,d]);
    14         }
    15         var arr=[e,b,c,d];
    16         test("云在","青天","水在","");
    17         //参数明确时可用call,不明确时用apply结合arguments
    18         print.call(window,"云在","青天","水在","");
    19 
    20     </script>
    21 </head>
    22 <body>
    23 
    24 </body>
    25 </html>


     

    欢迎关注微信公众号:“花栗鼠的红松树” 知乎专栏:“花栗鼠的红松树” 知乎: 卓怡 https://www.zhihu.com/people/zhuoyisun/activities
  • 相关阅读:
    select、poll和epoll
    Linux 常用命令之文件和目录
    SmartPlant Review 帮助文档机翻做培训手册
    SmartPlant Foundation 基础教程 3.4 菜单栏
    SmartPlant Foundation 基础教程 3.3 标题栏
    SmartPlant Foundation 基础教程 3.2 界面布局
    SmartPlant Foundation 基础教程 3.1 DTC登陆界面
    SmartPlant Foundation 基础教程 1.4 SPF架构
    SmartPlant Foundation 基础教程 1.3 SPF其他功能
    SmartPlant Foundation 基础教程 1.2 SPF集成设计功能
  • 原文地址:https://www.cnblogs.com/s-z-y/p/4459808.html
Copyright © 2011-2022 走看看