函数内部属性及函数属性和方法

  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对象里面
View Code

 

posted @ 2013-10-22 23:20  白小虫  阅读(247)  评论(0编辑  收藏  举报