我总结的call()与apply()方法的区别


【call()与apply()的区别】
在ECMAScript中每一个函数都是function类型(是javascript的基本引用类型)的实例,具有一定的属性和方法。call()和apply()则是这个function类型的实例的方法。每个函数都包含这两个非继承而来的方法。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。(用于传递参数)

区别:
apply()方法:接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组(可以是Array的实例,也可以是arguments对象)。
语法:apply(thisObj,[argArray])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。

<!DOCTYPE html>
 <html>
 <head>
    <meta charset="utf-8">
     <title>apply()例子</title>
     <script type="text/javascript">
         function sum(num1,num2){ return num1 + num2; } function callsum1(num1,num2){ return sum.apply(this,[num1,num2]);//传入数组
 } function callsum2(num1,num2){ return sum.apply(this,arguments);//传入arguments对象
 } alert(callsum1(10,10)); alert(callsum2(10,10)); </script>
 </head>
 <body>
 
 </body>
 </html>

call()方法:他与apply()方法的区别仅在与接收参数的方式不同。对于call()方法而言,第一个参数是this值没有变化变化的是其余参数都直接传递个函数。换句话说就是在使用call()方法时,传递给函数的参数必须逐个例举出来。
语法:call(thisObj,Object)
定义:调用一个对象的一个方法,以另一个对象替换当前对象。

<!DOCTYPE html>
 <html>
 <head>
    <meta charset="utf-8">
     <title>call()例子</title>
     <script type="text/javascript">
         function sum(num1,num2){ return num1 + num2; } function callsum(num1,num2){ return sum.call(this, num1, num2); } alert(callsum(10,10)); </script>
 </head>
 <body>

 </body>
 </html>

事实上,传递参数并非apply()和call()的用武之地,他们真正强大的地方是能够扩充函数赖以运行的作用域。这样的好处在于对象和方法不需要有任何耦合关系。这个在《javascript高级程序设计》-第三版书中117-118页有详细介绍。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM