对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
   对于第一个参数必须是一个对象,但对第二个参数:apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
语法:B.方法名.call(A,var1,var2,var3)

      B.方法名.apply(A,[var1,var2,var3])

   含义:A对象调用B对象的某个方法,A对象可以没有定义B对象要调用的那个方法,参数表示方法名所使用的参数。


样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN"         "http://www.w3.org/TR/html4/loose.dtd" >
<html>
<head>
     <meta http-equiv= "Content-Type"  content= "text/html; charset=utf-8" >
     <title>DojoSample1</title>
     <script type= "text/javascript"  src= "dojo.js" ></script>
     <script language= "javascript" >
         function  Dog(sound){
             this .sound = sound;
             this .talk =  function  (name){
                 alert( "this.soung返回值是:" + this .sound+ ";Dog的名字是:" +name);
             }
         }
         function  Cat(sound){
             this .sound = sound;
             this .talk =  function  (name){
                 alert( "this.soung返回值是:" + this .sound+ ";Cat的名字是:" +name);
             }
         }
         var  dog =  new  Dog( "狗" );
         dog.talk( "小狗狗" );  //this.soung返回值是:狗;我的名字是:小狗狗
         var  cat =  new  Cat( "猫" );
         cat.talk( "小猫猫" );  //this.soung返回值是:猫;我的名字是:小猫猫
         cat.talk.call(dog, "狗使用猫的方法" ); //this.soung返回值是:狗;Cat的名字是:狗使用猫的方法
         dog.talk.call(cat, "猫使用狗的方法" ); //this.soung返回值是:猫;Dog的名字是:猫使用狗的方法
     </script>
</head>
<body>
</body>
</html>