会挽雕弓如满月,西北望,射天狼。这篇文章主要讲述apply 和 call 的区别相关的知识,希望能为你提供帮助。
相同点:都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行
不同点:call
方法从第二个参数开始可以接收任意个参数,每个参数会映射到相应位置的func的参数上,可以通过参数名调用,但是如果将所有的参数作为数组传入,它们会作为一个整体映射到func对应的第一个参数上,之后参数都为空
列子:
function func (a, b, c) {}; func.call(obj, 1, 2, 3); // function接收到的参数实际上是 1, 2, 3func.call(obj, [1, 2, 3]); // function接收到的参数实际上是 [1,2,3],undefined,undefined
【apply 和 call 的区别】
apply
方法最多只有两个参数,第二个参数接收数组或者类数组,但是都会被转换成类数组传入func中,并且会被映射到func对应的参数上列子:
func.apply(obj, [1, 2, 3]); // function 接收到的函数实际上是1, 2, 3func.apply(obj, { 0: 1, 1: 2, 2: 3, length: 3 }); // function接收到的参数实际上是 1, 2, 3
有的时候是不是和我一样 apply 和 call 在使用中不知所措,不知道用哪个?两个方法该如何选择是吧?
很简单,根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用
call
,当要传入多个对象时,用apply
或者,如果需要传入的参数已经是一个数组或者类数组了,就用
apply
,如果还是单独的需要逐个传入的,可以考虑使用call
(如果你不嫌麻烦的话 )推荐阅读
- Android 图片Bitmap,drawable,res资源图片之间转换
- application:didFinishLaunchingWithOptions:
- android 使用Retrofit2 RxJava 文件上传
- 杂项-公司(Apple)
- 实践最有效的提高Android Studio运行编译速度方案
- Android_(控件)使用ListView显示Android系统中联系人信息
- Android P Beta发布!最新版本抢先体验!
- Android Studio3.x新的依赖方式(implementationapicompileOnly)
- PHP打开文件