apply()方法和call()方法

obj.func.call(obj1)       //是将obj1看做obj,调用func方法,将第一个参数看做函数调用的对象,可以看做,将obj的方法给obj1使用

 

ECMAScript规范给所有函数都定义了call()与apply()方法。

 

注意:call()与apply()的第一个参数都是需要调用的函数对象。

     在函数体内this的值就是指向这个调用者,也就是第一个参数,剩余的参数都是需要传递给函数的值

     call()与apply()的不同在于,剩余的参数,call(),剩余的参数可以是任意的值,而apply()剩余的值只能是数组。

 

例如:function add(a,b){  

    return a+b;

  }

  function sub(a,b){

  return a-b;

}

apply()的用法:

  var a1=add.apply(add,[4,2]);

  var a2=sub.apply(sub,[4,2]);

call()的用法:

  var a1=add.call(add,4,2);

  var a2=sub.call(sub,4,2);

 

Js认为他自己是万能的,既然高级语言能够继承,我JS也可以继承

  function fun1(){

  this.a=123;

  this.add=function(){

    return this.a;

  }

  function fun2(){

    this.a=456;

  }

}

 

  var a1=new fun1();

  var a2=new fun2();

  var a=a1.add.call(a2); //输出的是456

 

这里就是把f1的方法拿给f2来使用,f2便可以使用f1中所有的方法,这不正是高级语言中继承的概念吗,而且还可以模仿高级语言中的多继承

function fun1(){

  this.add=function(){

    return this.a+this.b;

  }

  this.fun2=function(){

    return this.a-this.b;

  }

  funtion fun3(){

    this.a=10;

    thi.b=2;

    fun1.call(this);

    fun2.call(this);

  }

}

 

var f3=new fun3();

console.log(f3.add())  //13;

console.log(f3.sub())  //8

 

posted @ 2015-08-06 21:23  Tobinary  阅读(318)  评论(0编辑  收藏  举报