这个说法我是在 jquery中听说的,因为 jquery有个特性,就是传入不同的参数就能执行不同的方法,那么这是怎么实现的呢?本文就是记录一下这个问题,以及学习过程。

我们存在几种方式实现:

  1. 简单的函数内判断,一个参数执行什么,两个参数执行什么,完全在一个函数内进行。
  2. 利用函数闭包实现

我们主要介绍第二种:

function method(obj,name,fnc){
    var old = obj[name];
    obj[name] = function(){
    // 这里的fnc.length表示传入的fnc函数的参数个数
        if(arguments.length === fnc.length){
            return fnc.apply(this,arguments);
        }else if(typeof old === "function"){
            return old.apply(this,arguments);
        }
    }
}

其主要思路就是将之前的函数用一个 old变量保存起来,然后重新定义新的方法,根据传入的参数个数决定需要执行哪个函数。其具体使用方式如下:

    var people = {
            values:["Zhang san","Li si"]
        };

        method(people,"find",function(){
            console.log("无参数");
            return this.values;
        })

        method(people,"find",function(firstname){
            console.log("一个参数");
            var ret = [];
            for(var i = 0;i < this.values.length;i++){
                if(this.values[i].indexOf(firstname) === 0){
                    ret.push(this.values[i])
                }
            }
            return ret;
        })

        method(people,"find",function(firstname,lastname){

            console.log("两个参数");

            var ret = [];

            for(var i = 0;i < this.values.length;i++){

                if(this.values[i] == firstname + " " + lastname){

                    ret.push(this.values[i])

                }

            }

            return ret;

        })

        console.log(people.find());

        console.log(people.find("Zhang"));
最后修改:2021 年 01 月 17 日 03 : 05 PM
如果觉得我的文章对你有用,请随意赞赏