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. [iOS基础控件 - 6.9] 聊天界面Demo

    A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话 ...

  2. matlab和FPGA中无符号数和有符号数的转化(转)

    在FPGA 设计过程中经常会遇到关于数表示之间的转化问题,最常见的是无符号数和有符号数之间的转化问题.(1)在FPGA设计过程中,能够很直接的看出数字的位宽,但经常以无符号数的形式输出,在后继的处理中 ...

  3. 认识JavaScript的原型

    本来打算也写一个JavaScript学习笔记的系列,不过由于笔者不太想买大部头的js数据,和网上的资料也不少,所以js系列就打算写到了算了了. 要理解JavaScript就要理解其原型,首先我们先区分 ...

  4. Egret的VS环境搭配

    安装配置 首先我们需要安装VS,这里我安装的是2013的版本,然后我们需要去Egret的官网下载Egret Engine.Egret Wing及Egret VS并进行安装,同时下载Google Chr ...

  5. MVC3 使用NPOI导出excel

    NPOI的官方教程:http://tonyqus.sinaapp.com/tutorial 此次项目中使用的是NPOI的1.25版本,项目是MVC3,在这里只贴上controller部分的代码: 1 ...

  6. linux使用getopt解析参数

    getopt是linux下解析命令行参数的api.以linux内核代码的一个例子来说明:   static void cmdline(int argc, char *argv[]){    int o ...

  7. Linux学习笔记----(2)

    闲着无事,就敲起了Linux 命令,熟悉一下.记得昨天在书上看到了 find命令的用法,觉得挺神奇的. 其中 find 能够确定文件的查找深度 于是 敲了如下命令: #mkdir father #to ...

  8. 【多校练习4签到题】HDU 4642—— Fliping game

    来源:点击打开链接 看上去很难,比赛的时候光看hehe了,也没有想. 但是仔细想想,是可以想出来的.一个棋盘上每个格子摆放一个硬币,硬币有正面1和反面0之分.现在两个人可以按照规则翻硬币,选择(x,y ...

  9. HDU 2136 Largest prime factor 參考代码

    #include <iostream> #include <vector> #include <cmath> using namespace std; const ...

  10. Android 浅谈相机研发

    在android中应用相机功能,一般有两种:一种是直接调用系统相机,一种自己写的相机.        我将分别演示两种方式的使用: 第一种:是使用Intent跳转到系统相机,action为:andro ...