apply的“非改变this“的用法
说到apply,大家都是知道是改变this指向的,也都会立马和call联系在一起,MDN官网上也是如是说:
其实我们在平常使用call和apply的时候,都是想到他们的改变函数的this的功能,
正如MDN上面说的apply和call只有唯一一点区别,就是:apply方法的二个参数接受的是“参数数组”!
也就是说:apply的第二个“参数数组”最终会打散被调用apply的函数所调用;
因此我们也可以利用这一特性,进行数组的打散的操作,如MDN中所述:
当然我们这里也可以使用ES6的扩张语句,如下:
之所以要写这篇文章就是告诫自己:思维不要太局限,就像觉得apply就只能用于改变this的指向的功能。当我们咋一看Math.max.apply(null, arr)这种会蒙圈,其实这里就是省去了自己展开了数组的操作。
在发现疑惑的时候,可以放空自己的过去的知识,重新阅读API。重新去思考这个问题。
就像自己以前做物理题目,脑子里永远别记忆题型,脑子里只需要记住公式和原理,所有的题目都是去思考分析再解答,以不变应万变!!而不是把题目归类,再回忆改类题型的解题方法。
apply的“非改变this“的用法的更多相关文章
- javascript中apply和eval结合的强大用法
eval是一个函数,可以接受一个参数,这个参数可以作为js语句被解释性的执行,利用这个特性,eval和apply结合起来,可以大大简化代码 如下例子 <a class="cl ...
- 深入理解this和call、bind、apply对this的影响及用法
首先看一道网易的面试题: var a = { a:"haha", getA:function(){ console.log(this.a); } } var b = { a:&qu ...
- JavaScript 中call()、 apply()、 bind()改变this指向理解
最近开发的过程中遇到了this指向问题,首先想到的是call().apply().bind()三个方法,有些时候这三个方法确实是十分重要,现在我们就把他们的使用方法及异同点讲解一下. 1.每个函数都包 ...
- js'中的apply和call和bind的用法
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数obj:这个对象将代替Function类里this对象args:这 ...
- JS中apply和call的区别和用法
Javascript中有一个call和apply方法,其作用基本相同,但是它们也有略微不同的地方. JS手册中对call方法的解释是: call方法:调用一个对象的一个方法,以另一个对象替换当前对象. ...
- apply/call/bind的区别与用法
apply 方法/call 方法 obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]); 两者作用一致,都是 ...
- apply 、 call 、 bind的用法
1.apply 方法 apply:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. apply方法最多只能有两个参数——新 ...
- 细说 call、apply 以及 bind 的区别和用法
call 和 apply 的共同点 它们的共同点是,都能够改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行的. 为何要改变执行上下文?举一个生活中的小例子:平时没时间做饭的 ...
- apply,call,bind函数作用与用法
作用 可以把方法借给其它对象使用,并且改变this的指向 a.apply(b,[3,2]);//this指向由a变为b, a的方法借给b使用 实例: function add(a,b){ ...
随机推荐
- iOS-AFNetworking参数和多文件同时上传【多文件上传】
1. 前言 在项目开发中,我们经常需要上传文件,例如:上传图片,上传各种文件,而有时也需要将参数和多个文件一起上传,不知道大家的项目中遇到了没有,我在最近的项目中,就需要这样的一个功能:同时上传参数. ...
- 【洛谷p3994】Highway 二分+斜率优化DP
题目大意:给你一颗$n$个点的有根树,相邻两个点之间有距离,我们可以从$x$乘车到$x$的祖先,费用为$dis\times P[x]+Q[x]$,问你除根以外每个点到根的最小花费. 数据范围:$n≤1 ...
- Android 手势识别—缩放
上一篇讲解了手势识别中的点击和双击事件的识别,用到的是GestureDetector类和GestureDetectorCompat类,用于监听用户触摸屏幕中的简单动作. 缩放 基本用法如下,可以通过缩 ...
- Form表单如何可以传递多个值传递List数组对象到后台的解决办法
举例说明: 后台有一个对象 User ,结构如下: 后台有一个对象 User ,结构如下: public class User{ private String username; private Li ...
- HUE配置文件hue.ini 的hbase模块详解(图文详解)(分HA集群和非HA集群)
不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...
- Check类之duplicate declaration checking/Class name generation/Type Checking
1.duplicate declaration checking /** Check that variable does not hide variable with same name in * ...
- 《垃圾回收的算法与实现》——GC标记-清除算法
基本算法 标记-清除算法由 ==标记阶段== 和 ==清除阶段== 构成. 标记即将所有活动的对象打上标记. 清除即将那些没有标记的对象进行回收. 标记与清除 遍历GC root引用,递归标记(设置对 ...
- j2ee高级开发技术课程第二周(web请求的整个过程、XML)
博客非原创,只是收集整理了一下网上的一些文章 一.web请求的整个过程 1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括 ...
- Fiddler HTTPS抓包
现在很多带有比较重要信息的接口都使用了安全性更高的HTTPS,而Fiddler默认是抓取HTTP类型的接口,要想查看HTTPS类型接口就需要安装fiddler证书. fiddler安装教程可参考: ...
- ruby中Regexp用法
Regexp 正则表达式的类.正则表达式的字面值是以双斜线内夹表达式的形式生成的. /^this is regexp/ 还可以使用Regexp.new(string)来动态地生成正则表达式对象. 超类 ...