
1 //3、函数内部属性 2 //arguments.callee方法 3 function box(num){ 4 if(num<=1){ 5 return 1; 6 }else{ 7 return num*box(num-1); //例:4*3*2*1 阶乘,递归 8 } 9 } 10 alert(box(1)); 11 12 13 function sum(num){ 14 if (num<=1){ 15 return 1; 16 }else{ 17 return num*arguments.callee(num-1); //使用arguments.callee,调用自身,实现递归 18 } 19 } 20 alert(sum(4)); 21 22 23 window.color='红色的'; 24 alert(this.color); 25 26 var box={ 27 color:'蓝色的', //这里的color是box下的属性,局部变量 28 sayColor:function(){ 29 alert(this.color); //这里的this是代表的box对象 30 } 31 } 32 33 34 window.color='红色的'; 35 36 function sayColor(){ 37 alert(this.color); //这里执行的时候是动态的,第一次是在window下,第二次是在box下 38 } 39 40 sayColor(); //这里调用sayColor,范围是在window下 41 42 var box={ 43 color:'蓝色的' 44 }; 45 46 box.sayColor=sayColor; //这短代码相当于sayColor:function(){alert(this.color);} 47 48 box.sayColor(); //这里执行的是box里面的this.color 49 50 51 52 //4、函数属性和方法 53 //ECMAscript中的函数是对象,因此函数也有属性和方法。 54 //每个函数都包含两个属性,length和prototype。 55 //其中,length属性表示函数希望接受的命名参数的个数。 56 57 58 function box(name,age){ 59 return name+age; 60 } 61 alert(box.length) 62 63 64 //prototype属性,保存所有实例方法的真正所在,也就是原型 65 //prototype下有两个方法:apply()和call(),每个函数都包含这两个非继承而来的方法。这两个方法的用途在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。 66 67 68 69 function box(num1,num2){ 70 return num1+num2; 71 } 72 73 function sum(num1,num2){ 74 return box.apply(this,[num1,num2]); //this表示window作用域,[]表示传递的参数 75 } 76 77 function sum2(num1,num2){ 78 return box.apply(this,arguments); //这个可以当数组传递 79 } 80 // alert(box(10,10)); 81 // alert(sum(10,10)); 82 alert(sum(10,10)); 83 84 85 86 //call()方法与apply()方法相同,区别仅仅在于接收参数的方式不同。第一个参数是作用域,没有变化。变化的是其余的参数都是直接传递给函数的。 87 88 function box(num1,num2){ 89 return num1+num2; 90 } 91 92 function sum(num1,num2){ 93 return box.call(this,num1,num2); //call只是传递参数不同,其他跟apply一样 94 } 95 96 alert(sum(10,10)); 97 98 99 100 var color='红色的'; //全局 101 102 var box={ 103 color:'蓝色的' //局部 104 } 105 106 function sayColor(){ 107 alert(this.color); 108 } 109 // sayColor(); //全局 110 111 //用call实现对象冒充,冒充box,冒充window下 112 // sayColor.call(window); //冒充window 113 // sayColor.call(this); //在这里this就是window 114 sayColor.call(box); //冒充box,作用域就在box对象里面