浅谈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),同理适于求数组中最小数
据说对于程序员简单的代码比任何语言都具有说法力,不知是不是真的:
<!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的联系&区别&应用匹配的更多相关文章
- 浅谈JavaScript的apply和call语句
我们试图在回调函数中,用this表示oDiv对象,这样感觉爽. 1 animate(oDiv,{"left":600},2000,function(){ 2 t ...
- 浅谈Java中linkedlist和arraylist区别
在Java中,关于集合框架有这样一个体系结构: 其主要由两个接口派生而出:Collection和Map,然后再衍生出各自的一些实现类(比如Collection接口又被继承与Set和List接口,而他们 ...
- (进阶篇)浅谈COOKIE和SESSION关系和区别
COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...
- 浅谈:html5和html的区别
什么是html5呢? html5最先由WHATWG(Web 超文本应用技术工作组)命名的一种超文本标记语言,随后和W3C的xhtml2.0(标准)相结合,产生现在最新一代的超文本标记语言.可以简单点理 ...
- 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景
浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...
- 浅谈 Mybatis中的 ${ } 和 #{ }的区别
好了,真正做开发也差不多一年了.一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧.前段时间刚好在公司遇到这样的问题. 一.举例说明 select * from us ...
- 浅谈java中的"=="和eqals区别
在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...
- [转] 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景
浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...
- 浅谈ES5和ES6继承和区别
最近想在重新学下ES6,所以就把自己学到的,记录下加强下自己的理解 首先先简单的聊下ES5和ES6中的继承 1.在es5中的继承: function parent(a,b){ this a = a; ...
随机推荐
- Light oj 1234 - Harmonic Number
题目链接:http://lightoj.com/volume_showproblem.php?problem=1234 给你一个数n,让你求 这个要是直接算的话肯定TLE,要是用1e8的数组预处理存储 ...
- Bootstrap 列偏移\列嵌套\列排序
1.列偏移 这个其实很简单就是通过一个样式类,通过.col-md-offset-*可以将列偏移到右侧.这些class通过使用*选择器将所有列增加了列的左侧margin.例如,.col-md-offse ...
- android知乎小圆圈刷新效果
前几天看到包括知乎在内的很多应用都使用到了一种小圆圈划动刷新的效果,仔细查了一下,原来是android v7包里面最新的刷新效果.使用起来也是十分简单的. 首先先建立一个activity,在布局文件里 ...
- Android,iOS,浏览器打开手机QQ与指定用户聊天界面
在浏览器中可以通过JS代码打开QQ并弹出聊天界面,一般作为客服QQ使用.而在移动端腾讯貌似没有公布提供类似API,但是却可以使用schema模式来启动手机QQ. 以下为具体代码: 浏览器(包括手机浏览 ...
- uistepper on ios versions prior to 5.0
xcode5 打开运行就出现这个错误 uistepper on ios versions prior to 5.0 直接在General -->Deployment Info -->Dep ...
- android 手电筒的实现
android手机用闪光灯做成手电筒的应用非常多,可是有的不能用. 后来发现是除了把 camera device的 flashmode设置成torch外还要打开预览: 以下是代码: MainActiv ...
- hdu 5569 matrix dp
matrix Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5569 D ...
- BZOJ 3555: [Ctsc2014]企鹅QQ hash
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法
1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lyds ...
- C/C++程序猿必须熟练应用的开源项目
作为一个经验丰富的C/C++程序猿, 肯定亲手写过各种功能的代码, 比方封装过数据库訪问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件訪问的类, 封装过UI界面库等, 也在实际的项目中应 ...