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),同理适于求数组中最小数

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

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script>
function print(a,b,c,d){
alert(a+b+c+d);
}
function test(a,b,c,d){
print.call(this,a,b,c,d);
print.apply(this,arguments);
print.apply(this,[a,b,c,d]);
}
var arr=[e,b,c,d];
test("云在","青天","水在","瓶");
//参数明确时可用call,不明确时用apply结合arguments
print.call(window,"云在","青天","水在","瓶"); </script>
</head>
<body> </body>
</html>

浅谈call和apply的联系&区别&应用匹配的更多相关文章

  1. 浅谈JavaScript的apply和call语句

    我们试图在回调函数中,用this表示oDiv对象,这样感觉爽. 1    animate(oDiv,{"left":600},2000,function(){ 2        t ...

  2. 浅谈Java中linkedlist和arraylist区别

    在Java中,关于集合框架有这样一个体系结构: 其主要由两个接口派生而出:Collection和Map,然后再衍生出各自的一些实现类(比如Collection接口又被继承与Set和List接口,而他们 ...

  3. (进阶篇)浅谈COOKIE和SESSION关系和区别

    COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...

  4. 浅谈:html5和html的区别

    什么是html5呢? html5最先由WHATWG(Web 超文本应用技术工作组)命名的一种超文本标记语言,随后和W3C的xhtml2.0(标准)相结合,产生现在最新一代的超文本标记语言.可以简单点理 ...

  5. 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景

    浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...

  6. 浅谈 Mybatis中的 ${ } 和 #{ }的区别

    好了,真正做开发也差不多一年了.一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧.前段时间刚好在公司遇到这样的问题. 一.举例说明 select * from us ...

  7. 浅谈java中的"=="和eqals区别

    在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...

  8. [转] 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景

    浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...

  9. 浅谈ES5和ES6继承和区别

    最近想在重新学下ES6,所以就把自己学到的,记录下加强下自己的理解 首先先简单的聊下ES5和ES6中的继承 1.在es5中的继承: function parent(a,b){ this a = a; ...

随机推荐

  1. POJ 3672 Long Distance Racing (模拟)

    题意:给定一串字符,u表示是上坡,d表示下坡,f表示平坦的,每个有不同的花费时间,问你从开始走,最远能走到. 析:直接模拟就好了,没什么可说的,就是记下时间时要记双倍的,因为要返回来的. 代码如下: ...

  2. string中c_str()、data()、copy(p,n)函数的用法

    标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str().data().copy(p,n). 1. c_str():生成一个const char*指针,指向以空 ...

  3. Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用

    动作游戏 还记得读书的时候熬夜打<波斯王子>的时光,我们的王子通过跳跃穿过墙壁的小洞.在高层建筑上进行攀爬和跳跃,还有在操作失误掉下高楼和触发必死机关后使用时之沙的时光倒流功能回归死亡之前 ...

  4. Spring3.0 入门进阶(三):基于XML方式的AOP使用

    AOP是一个比较通用的概念,主要关注的内容用一句话来说就是"如何使用一个对象代理另外一个对象",不同的框架会有不同的实现,Aspectj 是在编译期就绑定了代理对象与被代理对象的关 ...

  5. 剑指OFFER之链表中倒数第k个节点(九度OJ1517)

    题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为两个整数n和k(0<= ...

  6. jqGrid 学习

    jqGrid 学习: 一.下载需要的jqGrid包:http://www.trirand.com/blog/?page_id=6 二.下载JQuery UI:http://jqueryui.com/d ...

  7. linux虚拟主机wdcp系列教程之四

    当我们安装了网站服务管理系统wdcp之后,在使用过程中可能会出现这样或那样的疑问,下面给大家整理几点出来,方便大家学习. 1.wdcp支持的在线解压 有时小文件数据量,但整个目录上传会比较慢,如果打包 ...

  8. iptables实战系列:通过NAT转发实现私网对外发布信息

    原文地址: http://os.51cto.com/art/201109/289486.htm [51CTO独家特稿]本文将介绍一个使用iptables实现NAT转发功能的案例. 本文假设读者已经对N ...

  9. HDU 4343 D - Interval query 二分贪心

    D - Interval queryTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest ...

  10. Java 中队列的使用

    刚才看见群里的一个朋友在问队列的使用,确实在现实的写代码中非常少使用队列的,反正我是从来没使用过.仅仅是学数据结构的时候学过. 以下是我写的一个小样例,希望有不足之处请提出改正.O(∩_∩)O~ 看代 ...