javascrpt中的call方法

早期的博客4
call方法:

语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

常用示例:

先做说明:obj1.method1.call(obj2,arguments1,arguments2) 加上call的作用就是把obj1的方法放到obj2上使用,后面的arguments作为参数传入;

例1:

function add(a,b){
  alert(a+b);
}
function sub(a,b){
  alert(a-b);
}
add.call(sub,3,1);

这个例子的意思就是把add的方法放到sub上执行,即用add替换sub,也就是add.call(sub,3,1) == add(3,1) ,所以运行结果为alert(4);

例2:

function Class1(){
  this.name = "class1";
  this.showName = function(){
    alert(this.name);
  }
}

function Class2(){
  this.name = "class2";
}

var c1 = new Class1();
var c2 = new Class2();

c1.showName.call(c2);   //alert("class2)

注意,call的意思是把c1的方法放到c2上执行,原来c2是没有showName()方法的,现在把c1的showName()方法放到c2上执行,所以this.name应该class2;

实现继承:

例3:

function Class1(){
  this.showTxt = function(txt){
    alert(txt);
  }
}

function Class2(){
  class1.call(this);
}

var c2 = new Class2();
c2.showTxt("cc");   //cc

这样Class2就继承Class1,Class1.call(this) 的意思就是使用Class1对象替代this对象,那么在Class2中就是Class1的所有属性和方法了,c2对象能够直接调用Class1的方法以及属性。等于把父类的实例属性复制了一份给子类实例装上了(完全没有用到原型)

例4:(多重继承)

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); 
}    

你可能感兴趣的:(javascrpt中的call方法)