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)