【call()与apply()的区别】
在ECMAScript中每个函数都是function类型(是javascript的基本引用类型)的实例,具备必定的属性和方法。call()和apply()则是这个function类型的实例的方法。每一个函数都包含这两个非继承而来的方法。这两个方法的用途都是在特定的做用域中调用函数,实际上等于设置函数体内this对象的值。(用于传递参数)
区别:
apply()方法:接受两个参数,一个是在其中运行函数的做用域,另外一个是参数数组(能够是Array的实例,也能够是arguments对象)。
语法:apply(thisObj,[argArray])
定义:应用某一对象的一个方法,用另外一个对象替换当前对象。 javascript
<!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)
定义:调用一个对象的一个方法,以另外一个对象替换当前对象。html
<!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页有详细介绍。java