zoukankan      html  css  js  c++  java
  • 函数内部属性及函数属性和方法

      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
    高否?富否?帅否? 否? 滚去学习!
  • 相关阅读:
    BUUCTF | [极客大挑战 2019]PHP
    BUUCTF | [极客大挑战 2019]Secret File
    [网鼎杯 2018] Fakebook 复现
    [强网杯2019 随便注]总结
    [Flask(Jinja2)服务端模板注入漏洞(SSTI)]学习简记
    [Flask框架]学习简记
    ADO.NET基础
    SQL Server基础
    AdventureWorks2012下载链接
    SQL Server2012从入门到精通
  • 原文地址:https://www.cnblogs.com/baixc/p/3383354.html
Copyright © 2011-2022 走看看