zoukankan      html  css  js  c++  java
  • javascript 函数重载另一种实现办法

    最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解。

    先上代码:

    function addMethod(object,name,fn){
        var old = object[name];     //保存原有的函数,因为调用的时候可能不匹配传入参数的个数
        object[name] = function(){  //创建一个新匿名函数作为新方法
            if(fn.length == arguments.length){  //如果该匿名函数的形参个数和实参个数匹配,就调用该函数
                return fn.apply(this,arguments);
            }
            else if(typeof old == 'function'){  //如果不匹配,则调用原有函数
                return old.apply(this,arguments);
            };
        }
    }
    
    var ninjas = {values:["dean Edwards","sam Stephenson", "Alex Russell"]};
    addMethod(ninjas,"find",function(){
        return this.values;
    });
    addMethod(ninjas,"find",function(name){
        var ret = [];
        for(var i=0; i<this.values.length;i++){
            if(this.values[i].indexOf(name) == 0){
                ret.push(this.values[i]);
            }
        }
        return ret;
    })
    addMethod(ninjas,"find",function(fname,lname){
        var ret = [];
        for(var i=0;i<this.values.length;i++){
            if(this.values[i] == fname + ' ' + lname){
                ret.push(this.values[i]);
            }
        }
        return ret;
    })
    console.log(ninjas.find());
    console.log(ninjas.find("Alex"));
    console.log(ninjas.find("dean","Edwards"));
  • 相关阅读:
    View传参数到Controller(asp.net mvc3) 中庸
    ExtJS实战(3)spring
    spring AOP(2)
    ExtJS实战(1)准备工作和界面赏析
    ExtJS+DWR+Spring+Hibernate开发HRMS(5)
    ExtJS实战(2)hibernate
    ExtJS实战系列前言
    Hibernate QBC高级查询
    ExtJS+DWR+Spring+Hibernate开发HRMS(4)
    ExtJS+DWR+Spring+Hibernate开发HRMS(3)
  • 原文地址:https://www.cnblogs.com/junwu/p/5073769.html
Copyright © 2011-2022 走看看