浅谈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>

本文是自己理解着写的,前端新人一枚,字里行间难免有失偏颇,欢迎指正~

时间: 2024-10-03 15:47:47

浅谈call和apply的联系&区别的相关文章

浅谈Its与It&#39;s的区别

浅谈Its与It's的区别 http://www.hjenglish.com/new/p103924/ 旅英多年的作家陶杰先生在其专栏谈居英期间的见闻,说英国很多大学生连its和it's也分不清楚.大家会不会也分不清楚啊?请先拿纸笔出来,用its和it's各造一个句子看看.造了句子才继续看下去好吗? Its是代词,也是it的所有格(genitive case),解作“它的”. It's则是it is或it has的缩略语. 以下两句,请在虚线上填写正确的字: _____ time to buy

浅谈JavaScript的apply和call语句

我们试图在回调函数中,用this表示oDiv对象,这样感觉爽. 1    animate(oDiv,{"left":600},2000,function(){ 2        this.style.backgroundColor = "red"; 3    }); 但是不行,回调函数中this不是oDiv. 所以我们现在要想一个办法,让callback运行,并且callback里面的this是oDiv. 1    callback.call(elem); 或者:

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

COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 cookie 的值. 1.设置Cookie PHP用SetCookie函数来设置Cookie. SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下: int SetCookie(string name, string value, int exp

浅谈Java接口和抽象类的区别

面向对象的设计,服用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用. 说到了抽象,就不得不提到Java接口和Java抽象类了,这也是我这里想要谈论的重点. Java接口和抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现.OOP面向对象编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口编程,面向抽象编程,正确地使用接口,抽象类这些有用的抽象类型作为你结构层次上的顶层. Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方

浅谈关于SRAM与DRAM的区别

在上体系结构这门课之前,我只知道DRAM用作内存比较多,SRAM用作cache比较多.在今天讲到内存技术时,我对于这两个基础概念有了更加完整的认识.这篇文章是我的听课心得,现在分享给各位,仅供参考,若有错误多多指正. 从名字上看,SRAM与DRAM的区别只在于一个是静态一个是动态.由于SRAM不需要刷新电路就能够保存数据,所以具有静止存取数据的作用.而DRAM则需要不停地刷新电路,否则内部的数据将会消失.而且不停刷新电路的功耗是很高的,在我们的PC待机时消耗的电量有很大一部分都来自于对内存的刷新

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

一.举例说明 1 select * from user where name = "dato"; 2 3 select * from user where name = #{name}; 4 5 select * from user where name = ${name}; 一般情况下,我们都不会注意到这里面有什么不一样的地方.因为这些sql都可以达到我们的目的,去查询名字叫dato的用户. 二.区别 动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一

浅谈mysql和sql server的区别

对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server.这两者最基本的相似之处在于数据存储和属于查询系统.你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL.还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度.同时,二者也都提供支持XML的各种格式.除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它

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

浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器用户身份的会话方式. 区别: 1.保持状态:cookie保存在浏览器端,session保存在服务器端 2.使用方式: (1)cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie.如果在浏览器中设置了cookie

浅谈:html5和html的区别

什么是html5呢? html5最先由WHATWG(Web 超文本应用技术工作组)命名的一种超文本标记语言,随后和W3C的xhtml2.0(标准)相结合,产生现在最新一代的超文本标记语言.可以简单点理解成:HTML 5 ≍ HTML+CSS 3+JS+API. hmtl5于html的区别 我们现在web前端开发的静态网页,一般都是html4.0.同时是符合W3C的xhtml1.0规范来的.那么他们两者又有什么实质性的区别呢? 1.在文档类型声明上 html:<!DOCTYPE html PUBL