理解apply()和call()

  首先,每个函数都包含两个非继承而来的方法:appl()和call()。这两个方法的用途都是在特定的作用域中调用函数,实际等于设置函数体内this对象的值。

这两个方法接收的参数可以分为两个部分,

  第一部分是在其中运行函数的作用域,如果就在当前函数体中运行,就可以直接使用this值,如果在window作用域中使用,可以传入window值,这样,可以实现扩充作用域;

  第二部分是参数组,在apply中可以传入Array实例,也可以是arguments对象;在call中,传递给函数的参数必须逐个列举;如果没有参数,这个部分可以省略。

举个例子,如下所示:

 1 function sum(num1,num2){
 2   return num1+num2;
 3 }
 4 
 5 //两个数相等就相加,不相等就相乘
 6 function mul(num1,num2){
 7   if(num1 != num2){
 8     return num1*num2;
 9   }else{
10     return sum.apply(this,arguments);
11     //可以为 sum.apply(this,[num1,num2])或sum.call(this,num1,num2);
12   }
13 }
14 
15 console.log(mul(5,6));   //30
16 console.log(mul(6,6));   //12

 

posted @ 2015-09-11 14:48  奈河桥  阅读(224)  评论(0编辑  收藏  举报