apply的妙用
有一个很常见的问题”call和apply的区别是什么?“,大家都知道答案:它们的区别仅在于接受参数的方式不同,传递给call的第二个参数必须逐个列举出来,而传递给apply的第二个参数则是一个数组,如下
function sum(num1,num2){
return num1 + num2;
}
function callSum(num1,num2){
return sum.call(this,num1,num2);
}
function applySum(num1,num2){
return sum.apply(this,[num1,num2]);
//或者return sum.apply(this,arguemnts);
}
也就是说,apply函数其实具备一个功能:将传入的参数数组转换成参数列表的形式,一个个传递。利用apply的这个功能,可以简化很多操作。
求数组中的最大/最下值
var arr = [1,2,3,4,5];
console.log(Math.max.apply(null,arr));//5 apply方法
console.log(Math.max(1,2,3,4,5));//5 原始方法
1)上述代码中两种方法都实现了找出最大值,但如果数组很长或者只给了arr(不知道其中具体的数值),采用原始方法会很麻烦(要列很长的数,或者要求数组先转换成列表),而apply方法直接apply自身的转换功能,就简单的实现了。
2)apply方法中的第一个参数为null,是因为没有对象去调用apply,我们只需要用这个方法帮助计算就行。
合并两个数组
var arr1 = [1,2,3]
var arr2 = [4,5,6];
Array.prototype.push.apply(arr1,arr2);
console.log(arr1) ;//[1,2,3,4,5,6]
要实现数组合并也是比较麻烦的,按上述方法对arr1调用apply,就可以简单的把arr2按顺序一个个合并到数组arr1中了。
总结:上面两个用法都有一个共同点,就是需要将数组转换成列表形式,而apply正好可以实现这个功能。
apply的妙用的更多相关文章
- js中apply和call的用法 以及apply的妙用 (来自网络)
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数obj:这个对象将代替Function类里this对象args:数 ...
- 数组降维-JavaScript中apply方法妙用
海纳百川,有容乃大 1.普通循环转换方式 将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转 ...
- call,apply学习小结
之前一直不太清楚js的call,apply的作用是什么,直到看到了这篇博文 http://blog.csdn.net/myhahaxiao/article/details/6952321 functi ...
- call( )、apply( )
call( )和apply( )都是用于改变函数执行时的上下文,唯一最大区别在于传入参数的形式不同. 这两个函数都是函数的方法,只有函数能够打点调用call().apply(),表示用指定的上下文执行 ...
- 【优雅代码】深入浅出 妙用Javascript中apply、call、bind
这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: “对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂的知识.我 ...
- (转)深入浅出 妙用Javascript中apply、call、bind
原文连接 深入浅出 妙用Javascript中apply.call.bind 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且 ...
- 妙用Javascript中apply、call、bind
对apply.call.bind的认识,并且列出一些它们的妙用加深记忆. apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(cont ...
- 深入浅出妙用 Javascript 中 apply、call、bind
这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: "对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂 ...
- 转---深入浅出妙用 Javascript 中 apply、call、bind
作者:伯乐在线专栏作者 - chokcoco 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师 ...
随机推荐
- 启动express,端口被占用
启动express项目报错: root@ubuntuServerVM:/home/nodejs/meadowlark/site# node meadowlark.jsevents.js:160 thr ...
- 火焰图定位dbproxy问题
https://blog.csdn.net/oujiangping/article/details/78580450 https://blog.csdn.net/gatieme/article/det ...
- 数学规划求解器lp_solve超详细教程
前言 最近小编学了运筹学中的单纯形法.于是,很快便按奈不住跳动的心.这不得不让我拿起纸和笔思考着,一个至关重要的问题:如何用单纯形法装一个完备的13? 恰巧,在我坐在图书馆陷入沉思的时候,一位漂亮的小 ...
- SpringMvc redirect
SpringMVC redirect 核心 首先网上百度到的资源基本已经够用, 留作记录. SpringMVC-redirect重定向跳转传值 虽然这哥们也是转的, 但又没有留源地址. 因此 ... ...
- Openerp 添加修改报表
Report Designer 模块在生成新报表的时候是有BUG的不建议直接使用,不过我们也可以通过该插件再写简单的代码来实现新添加报表,插件安装成功后我们可以按照下列方法来添加报表 OpenERP ...
- 《Algorithms算法》笔记:元素排序(3)——洗牌算法
<Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很 ...
- 时间格式为yyyymmdd的String类型的时间,计算时间间隔有错误
时间格式类型为yyyymmdd,并且为String类型,计算时间间隔有误,一直搞不清楚是什么原因.网上百度了许多,时间格式基本都是yyyy-mm-dd这样的时间格式的,但是yyyymmdd这样的时间格 ...
- Tomcat服务器安装配置
1.到http://tomcat.apache.org/官网下载Tomcat的zip版本,这样直接解压就行了,不用安装.我下载是Tomcat6.0版本的zip文件,解压在D:\Java\apache- ...
- 关于Input输入框蓝色外框的操作
1.去掉input外框的css: input { outline : none; //去掉外框 //outline:medium; } input:focus { outline : none; } ...
- ThreadPoolExecutor 杂记
When a new task is submitted in method execute(Runnable), and fewer than corePoolSize threads are ru ...