JavaScript 这几行代码地位高到我完全看不懂!!!-利用闭包实现函数的重载

34 阅读1分钟

传参数调用函数的问题

这样的需求 :调用函数时传入几个参数 就执行对应参数个数的函数  
以下 以0个参数 1个参数 两个参数为例 
第一次看见下面代码时候 特么的脑子里一万个*** 
完全看不懂 如何浅入浅出~~ 
<script>
 function User(){

 }
 let user=new User();



    function addMethods(obj,name,fn){  //作者是jq之父
        let old=obj[name];  
        obj[name]=function(){
            if(fn.length===arguments.length){  
                fn.apply(this,arguments)
            }
            else if(typeof old==="function"){
                old.apply(this,arguments)
            }
        }
    }
    addMethods(user,"find",()=>{
        console.log("no params")
    })
    addMethods(user,"find",(a)=>{
        console.log("一个参数",a)
    })
    addMethods(user,"find",(a,b)=>{
        console.log("两个参数",a,b)
    })


    user.find()  // no params
    user.find(1)  //一个参数 1
    user.find(1,2) //两个参数 1 2


</script>