首页 > 代码库 > javascript call 函数详解

javascript call 函数详解

  call 主要应用于function 对象,要求javascript  必须是5.5 以上的。

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

 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..这些做为参数传入. 

下面我们举几个例子介绍以下:

  function a(x,y){
	alert(x+y);
  }
  function b(x,y){
   alert(x*y);
  }
  a.call(b,3,4)

如上:这个例子就是a 代替 b ,a.call(b,3,4)==a(3,4);  //注意js 中函数是对象,函数名是对象的引用。

再看一个例子:所

  function class1(){
	 this.name="class1";
	 this.showNam=function(){
	 alert(this.name);
	 }
  }
  function class2(){
	 this.name="class2";
  }
  var c1=new class1();
  var c2=new class2();
  c1.showNam.call(c2);

 上面的意思是把c1的方法放到c2 执行,原本c2 没有showNam方法,通过call 那么c2 也就有了call 的方法。所以结果是alert(class2);

 call 实现继承,例子如下:

 

  function class1(){
	this.showTxt=function(txt){
	 alert(txt);
	}
  }
  
  function class2(){
	  class1.call(this);
  }
  var c2=new class2();
  c2.showTxt("cc");

 这样 class2 就继承了class1,class1.call(this),就是把class1 对象代替 this 对象,那么 class2 不就有 c1所有属性和方法吗?c2 对象就能够直接调用Class1 的方法以及属性了,执行结果就是:alert(“cc”); 

 其实call 还可以实现多重继承:

 

  function class10(){
	this.showsub=function(a,b){
	 alert(a-b); 
	}
  }
  function class11(){
	this.showadd=function(a,b){
     alert(a+b);
	}
  }
  
 function class2(){
	 class10.call(this);
	 class11.call(this);
 }
 
 var a=new class2();
 a.showsub(3,4);
 a.showadd(4,5);

这样就实现了双重继承。


javascript call 函数详解