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()中的第一个参数是一样的,第二个参数是个数组。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。