zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    P3275 [SCOI2011]糖果 题解
    hdu 2962 题解
    hdu 2167 题解
    hdu 2476 题解
    hdu 5418 题解
    2019.10.16&17小结
    poj 3061 题解(尺取法|二分
    poj 1852&3684 题解
    NOIP2017[提高组] 宝藏 题解
    一类经典问题的解法
  • 原文地址:https://www.cnblogs.com/dongye/p/3264687.html
Copyright © 2011-2022 走看看