<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>call和apply的使用</title> </head> <body> <p>关于 JavaScript 中 apply 和 call 方法的区别</p> <p> 如果没接触过动态语言,以编译型语言的思维方式去理解 JavaScript 将会有种非常神奇而怪异的感觉,因为意识 上往往不可能的事,
偏偏就在 js 中发生了,甚至会觉得 无法理喻,如果在 JavaScript 这自由而变幻无穷的语言 中遇到这种感觉,那么就从现在开始,
放下你的"偏见",因为 这对你来说绝对是一片新大陆 理解 JavaScript 动态变换运行时上下文特性,这种特性 主要体现在 apply 和
call 这两个方法的应用上 区别 apply 跟 call 就一句话 fun.call(this,arg1,arg2,arg3) == fun.apply(this,arguments) == fun.apply(this,[arg1,arg2,arg3]) </p> <p> call,apply都是属于Function.prototype的一个 方法,是 JavaScript 引擎内在实现的,因为属于 Function.prototype,
所以每个 Function 都可以使用 call,apply属性,既然它们作为方法 的属性,那么它们的使用当然就是针对方法的了, 这两个方法是
非常容易混淆的,因为他们的作用都是 一样的,只是使用方式不同 相同点: 两个方法产生的作用是完全一样的 不同点: 方法传递的参数不同 </p> <p> call,apply作用就是借用别人的方法来调用,就 像在调用自己的方法一样 </p> </body> <script type="text/javascript"> function print(a, b, c, d) { alert(a + b + c + d); } function example(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('测', '试', '例', '子'); </script> </html>