JavaScript相关-深入理解函数2

1,函数的arguments

 1 function say(num) {
 2         /*
 3          * 在函数对象中有一个属性叫做arguments,通过这个属性可以获取相应的参数值,这个属性
 4          * 是一个数组,其实就是传递进来的参数
 5          */
 6         alert(arguments.length);
 7         for(var i=0;i<arguments.length;i++) {
 8             alert(arguments[i]);
 9         }
10         alert(num);
11     }
12     /**
13      * 在arguments这个对象中有一个callee的方法,arguments.callee(arg)可以反向的调用
14      */
15     
16     // say(1,2,3);
17     function factorial(num) {
18         if(num<=1) return 1; 
19         //此时和函数名耦合在一起
20         // else return num*factorial(num-1);
21         //以下就实现了函数名的解耦合,在js中通常都是使用这种方式做递归
22         else return num*arguments.callee(num-1);
23          
24     }

2,this

当需要创建一个类的时候,设置类的属性和方法需要通过this关键字来引用。

 1 var color = "red";
 2 function showColor() {
 3     alert(this.color);
 4 }
 5 /**
 6  * 创建了一个类,有一个color的属性和一个show的方法
 7  */
 8 function Circle(color) {
 9     this.color = color;
10     this.showColor = showColor;
11 }
12 
13 var c = new Circle("yellow");
14 //使用c来调用showColor方法,等于调用了showColor()方法
15 //此时的this是c,所以color就是yellow
16 c.showColor();//yellow
17 //此时调用的对象等于是window,showColor的this就是window,所以就会找window中color
18 showColor();//red

3,函数的属性length

函数的length就表示该函数所期望的参数值。

1 function fn2(num1,num2) {
2 }
3 alert(fn2.length);//2

4,apply()和call()方法

调用一个对象的一个方法,以另一个对象替换当前对象。

 1 function sum(num1,num2) {
 2     return num1+num2;
 3 }
 4 
 5 function callSum1(num1,num2) {
 6     //使用sum这个函数来完成一次调用,调用的参数就是callSum1这个函数的参数
 7     //apply的第二个参数表示一组参数数组
 8     return sum.apply(this,arguments);
 9 }
10 
11 function callSum2(num1,num2) {
12     //关键就是第二个参数是数组
13     return sum.apply(this,[num1,num2]);
14 }
15 alert(callSum1(12,22));
16 alert(callSum2(22,32));
17 
18 function callSum3(num1,num2) {
19     //call是通过参数列表来完成传递,其他和apply没有任何区别
20     return sum.call(this,num1,num2);
21 }
22 alert(callSum3(22,33));

(2)中使用call和apply之后,对象中可以不需要定义方法了

showColor.call(this);//使用上下文来调用showColor,结果是red
showColor.call(c);//上下文对象是c,结果就是yellow

原文地址:https://www.cnblogs.com/dongye/p/3264687.html