一箫一剑平生意,负尽狂名十五年。这篇文章主要讲述all()和apply()的区别相关的知识,希望能为你提供帮助。
ECMAScript 规范给所有函数都定义了 call 与 apply 两个方法,它们的应用非常广泛,它们的作用也是一模一样,只是传参的形式有区别而已。apply( )apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作为函数参数所组成的数组。
var obj = {
name : '
linxin'
,
}
function func(firstName, lastName){
console.log(firstName + '
'
+ this.name + '
'
+ lastName);
}
func.apply(obj, ['
A'
, '
B'
]);
// A linxin B
可以看到,obj 是作为函数上下文的对象,函数 func() 中 this 指向了 obj 这个对象。参数 A 和 B 是放在数组中传入 func() 函数,分别对应 func()参数的列表元素
call( )call 方法第一个参数也是作为函数上下文的对象,但是后面传入的是一个参数列表,而不是单个数组。
var obj = {
name: '
linxin'
}function func(firstName, lastName) {
console.log(firstName + '
'
+ this.name + '
'
+ lastName);
}func.call(obj, '
C'
, '
D'
);
// C linxin D
对比 apply 我们可以看到区别,C 和 D 是作为单独的参数传给 func 函数,而不是放到数组中。
对于什么时候该用什么方法,其实不用纠结。如果你的参数本来就存在一个数组中,那自然就用 apply,如果参数比较散乱相互之间没什么关联,就用 call。
以上内容来源于github上https://github.com/lin-xin/blog/issues/7
【all()和apply()的区别】以上不管哪一种如果使用arguments实参列表,使用方法都一样
var obj = {
name: '
linxin'
}function func(firstName, lastName) {
console.log(arguments[0] + '
'
+ this.name + '
'
+ arguments[1] );
}func.call(obj, '
C'
, '
D'
);
// C linxin D//使用arguments看的只是他的实参列表;不管你是数组还是参数列表都一样
var obj = {
name: '
linxin'
}function func(firstName, lastName) {
console.log(arguments[0] + '
'
+ this.name + '
'
+ arguments[1] );
}func.apply(obj, '
C'
, '
D'
);
// C linxin D
推荐阅读
- Android Locale.getDefault().getCountry()为空
- Android中的Prelink技术
- Mac OSX下Appium驱动iPhone真机
- Android之ADB
- APP测试要点以及常见bug分类
- appium---切换webview时报错
- Android开发 ViewModel_2_了解多种的构建方式 (Factory 与 key)
- Android 4.4 Init进程分析二(init.rc文件的解析)
- 点击微信内网页a标签,直接跳转打开淘宝APP的方法如此简单