call方法:

调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[, [,.argN]]]]])

thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

obj1.method1.call(obj2,argument1,argument2)
如上,call的作用就是把obj1的方法放到obj2上使用,后面的argument1..这些做为参数传入

举例说明1:

  <script type="text/javascript">     function add(a,b){ 	   alert(a+b); 	}  	function sub(a,b){ 	   alert(a-b); 	}  	add.call(sub,4,5);   </script>
输出结果为:9,表示把add方法放到sub上使用,然后传入后面相应的参数


举例说明2:

  <script type="text/javascript">       function test1(){ 	    this.name="test1"; 		this.method1=function(){ 		   alert(this.name); 		} 	  } 	  function test2(){ 	    this.name="test2"; 	  }  	  var t1=new test1(); 	  var t2=new test2();       t1.method1.call(t2);   </script>
输出结果为:test2,表示把t1的method1方法放到t2中去执行


举例说明3:单重继承

  <script type="text/javascript">
      function animal(){
        this.eat=function(){
          alert("动物在吃饭");
        }
      }
      function dog(){
        animal.call(this);
      }

      var d=new dog();
      d.eat();
  </script>

输出:动物在吃饭,animal.call(this);表示把animal对象代替了this对象,那么this对象就有了animal中的属性和方法


举例说明4:多重继承

  <script type="text/javascript">
      function animal(){
        this.eat=function(){
          alert("动物在吃饭");
        }
      }

      function dogClass(){
        this.type="狗类";
      }
      function dog(){
        animal.call(this);
        dogClass.call(this);
      }

      var d=new dog();
      d.eat();
      alert(d.type);
  </script>

输出:动物在吃饭,狗类,同上,同时dogClass对象也代替了this对象,那么dog中也会有dogClass类中的属性和方法,实现了多重继承