apply方法和call方法都可以将函数绑定到其他对象上执行,区别在于调用参数形式的不同,apply方法通过数组形式传入函数的调用参数,而call方法使用逗号分隔的参数列表。
例如,obj1.methodA.apply(obj2, ["调用methodA"]); 表示将obj1的methodA方法,绑定到对象obj2上执行。
示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<script language="javascript">
<!--
function ClassA(){
this.className= "classA";
this.methodA = function(msg){
document.writeln(this.className+" : "+ msg+"<br>");
}
}
function ClassB(){
this.className= "classB";
this.methodB = function(msg){
document.writeln(this.className+" : "+msg+"<br>");
}
}
var obj1 = new ClassA();
var obj2 = new ClassB();
obj1.methodA("调用methodA");
obj2.methodB("调用methodB");
obj1.methodA.apply(obj2, ["调用methodA"]);
obj2.methodB.apply(obj1, ["调用methodB"]);
obj1.methodA.call(obj2, "调用methodA");
obj2.methodB.call(obj1, "调用methodB");
-->
</script>
<body >
</body>
</html>
输出结果为:
classA : 调用methodA
classB : 调用methodB
classB : 调用methodA
classA : 调用methodB
classB : 调用methodA
classA : 调用methodB