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"));
  • 相关阅读:
    在springMVC的controller层获取view层的参数的方式
    springMVC创建基础变量
    javascript 继承
    CSS3的新属性的一下总结
    常用js函数整理--common.js
    function与感叹号
    javascript void运算符
    ui组件--弹出层layer的使用
    组件,控件,插件,库都是什么鬼啊
    jsdoc文档
  • 原文地址:https://www.cnblogs.com/junwu/p/5073769.html
Copyright © 2011-2022 走看看