首页 > 代码库 > javascript中call函数与apply

javascript中call函数与apply

javascript中的call方法使当前对象可以调用另一个对象的方法,即改变this的指向内容

 1 var first_object = { 2 num: 42 3 }; 4 var second_object = { 5 num: 24 6 }; 7 function multiply(mult) { 8 return this.num * mult; 9 }10 alert(multiply.call(first_object, 5)); // 210
View Code

此时返回的是执行结果,210。可以看到first_object 中的this变成 了当前对象中的first_object中的this。并且first_object拥有当前对象中的所有方法和属性。

call函数的使用方式为:

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

thisObj

选中对象

arg1,arg2..argN

可选项。将被传递方法参数序列。

 1 function Class1()  2 {  3     this.name = "class1";  4  5     this.showNam = function()  6     {  7         alert(this.name);  8     }  9 } 10 11 function Class2() 12 { 13     this.name = "class2"; 14 } 15 16 var c1 = new Class1(); 17 var c2 = new Class2(); 18 19 c1.showNam.call(c2); 

call 的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,执行的结果就是 :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 中不就有Class1 的所有属性和方法了吗,c2 对象就能够直接调用Class1 的方法以及属性了,执行结果就是:alert(“cc”); 

 

apply()函数和call()作用是一样的,只不过apply传入两个参数第一个参数和call()中的第一个参数是一样的,第二个参数是个数组。

javascript中call函数与apply