Web前端面试指导(三十五):call() 和 apply() 的区别?
2016-10-10 15:18
417 查看
题目点评
本题属于比较一般性的问题,稍有接触的同学都是能够掌握的,先说清楚他们的相同点,方法的作用的,在把它们的差异讲清楚。解题方法
相同点:两个方法产生的作用是完全一样的,都用来改变当前函数调用的对象。
不同点:调用的参数不同,比较精辟的总结:
foo.call(this,arg1,arg2,arg3) == foo.apply(this, arguments)==this.foo(arg1, arg2, arg3)
具体的使用
1.call的使用
语法
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj 可选项。将被用作当前对象的对象。
arg1,arg2, , argN 可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
示例
<input id="myText"> <script> function Obj() { this.value="对象!"; } varvalue="global 变量"; function Fun1(a,b){ alert(this.value); } window.Fun1(); //global 变量 Fun1.call(window,1,2); //global 变量 Fun1.call(document.getElementById('myText')); //input text Fun1.call(new Obj()); //对象! </script>
2.apply()
apply与call的功能几乎一样,第一个参数意义都一样,只是第二个参数有点不同apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,call从第二个参数开始,依次传值给调用函数的参数
3.代码比较
function print(a, b, c, d){ alert(a + b + c + d); } functionexample(a, b , c , d){ //用call方式借用print,参数显式打散传递 print.call(this, a, b, c, d); //用apply方式借用print, 参数作为一个数组传递, //这里直接用JavaScript方法内本身有的arguments数组 print.apply(this, arguments); //或者封装成数组 print.apply(this, [a, b, c, d]); } //下面将显示”智学无忧” example("智" , "学" , "无", "忧");
相关文章推荐
- Web前端面试指导(十二):::before 和:before有什么区别?
- Web前端面试指导(三十二):同步和异步有什么区别?
- Web前端面试指导(二十五):谈一下Jquery中的bind,live,delegate,on的区别?
- Web前端面试指导(十二):::before 和:before有什么区别?
- Web前端面试指导(二十二):用js实现千位分隔符,怎么实现?
- Web前端面试指导(一):写好简历是面试成功的第一步
- Web前端面试指导(二十四):事件是什么?如何阻止事件冒泡?
- Web前端面试指导(十):元素定位有哪些?
- Web前端面试指导(二十九):Ajax 是什么? 如何创建一个Ajax?
- Web前端面试指导(十八):用纯CSS创建一个三角形的原理是什么?
- Web前端面试指导(三):简历投递诀窍
- Web前端面试指导(十六):为什么要初始化CSS样式?
- Web前端面试指导(四):面试前准备-有备而去百战百胜
- Web前端面试指导(二十六):JSON 格式是什么?你了解吗?
- Web前端面试指导(三十):JavaScript有几种类型的值?你能画一下他们的内存图吗?
- Web前端面试指导(二十一):如何向数组中间插入或删除元素?
- Web前端面试指导(八):iframe有那些缺点
- Web前端面试指导(七):入职后的建议
- Web前端面试指导(十三):css样式的优先级是怎么样的?
- Web前端面试指导(二十七):原型是什么?原型链是什么?