首先,每个函数都包含两个非继承而来的方法: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
时间: 2024-10-20 02:17:01