zoukankan      html  css  js  c++  java
  • 模拟重载函数

        小编以前写wp的,所有习惯了有函数的重载,根据参数的不同,而可以调用名称相同的函数,可是js中的function对象也是以属性的形式出现的,在一个对象中增加与已有的function同名的function时,旧的function对象则会被覆盖。= =。

         那么怎么让js也可以有这种特性呢?js中,每个函数内部,都有arguments对象(包含函数被调用时的实际参数)。

         额 ,在这里补充一点,js如果在调用时函数多于方法定义时的形参,则多余的函数会被省掉。对于这里的arguments对象,它的原型是Object.prototype,但它有个和数组一样的属性length,同时实参可以通过[]操作符来获取。

    function sayHi(){
    switch(arguments.length){
    case 0:
    return "Hi";

    case 1:
    return "Hi,"+arguments[0];

    case 2:
    return (arguments[1]=="cn" ? "你好,":"Hi,")+arguments[0]
    };
    }

    sayHi();  //Hi
    sayHi("Fnncat"); //Hi,Fnncat
    sayHi("Fnncat","cn");//你好,Fnncat

    callee是arguments对象的一属性,其值是当前正在执行的function对象。它的作用是使匿名function可以被递归调用。

    function fibonacci (num){
    cosole.log(num);
    return (function (num)){
    cosole.log(num);
    if(typeof num !=="number")
    return -1;
    num =parseInt(num);
    if(num<1)
    return -1;
    if(num ==1|| num==2)
    return 1;
    return arguments.callee(num -1)+arguments.callee(num - 2);
    })(num);
    }
    fibonacci(100);

         

  • 相关阅读:
    【NOIP】提高组2015 运输计划
    【BZOJ】1635: [Usaco2007 Jan]Tallest Cow 最高的牛
    【51nod】1766 树上的最远点对
    【BZOJ】2054: 疯狂的馒头
    【SRM20】数学场
    【Luogu】P3930 SAC E#1
    【Luogu】P3927 SAC E#1
    【Luogu】 P3928 SAC E#1
    【Codeforces】868C. Qualification Rounds
    【CodeForces】866D. Buy Low Sell High
  • 原文地址:https://www.cnblogs.com/fnncat/p/4853781.html
Copyright © 2011-2022 走看看