美文网首页大前端技术栈
JavaScript函数重载

JavaScript函数重载

作者: ZoranLee | 来源:发表于2020-08-04 19:19 被阅读0次

JQuery常用方法

  • $('.test')
  • $('.test','td')
  • $(['.test', 'td'])

函数重载

同名函数的形式参数、数据类型或数量不同

于是乎脑海中一堆if 和 else喷涌而出:
function overLoad() {//根据arguments类型和长度进行不同的处理
  switch(arguments.length) {
    case 0:
      break;
    case 1:
      break;
    case 2:
       break;
          ...
}
}

借鉴jQuery 实现函数重载

function addMethods(obj, name, f) {
        let old = obj[name];
        obj[name] = function () {
            if (f.length === arguments.length) {
                return f.apply(this, arguments);
            } else {
                return old.apply(this, arguments);
            }
        }
    }

  let people = {
        name: ['张三', '李四', '王五']
    };
  
  let find0 = function () {
        return this.name;
    };

    let find1 = function (name) {
        var arr = this.name;
        for (let i = 0; i <= arr.length; i++) {
            if (arr[i] === name) {
                return i
            }
        }
    };

    addMethods(people, 'find', find0)
    addMethods(people, 'find', find1)
    console.log(people.find('李四'));

重载的优化

Object.prototype.addMethod = function (name, fn) {
    var old = this[name];
    this[name] = function () {
        var fncLen = fn.length,
            argLen = arguments.length;
        if (fncLen === argLen) {
            return fn.apply(this, arguments);
        } else if (typeof old === "function") {
            return old.apply(this, arguments);
        } else {
            throw new Error("no method with " + argLen + " param(s) defined!");
        }
    }
};

//函数多参数重载,添加方法和使用:
let find0 = function () {
        return 'no param';
};
let find1 = function(param){
return param
}
let people = {};
people.addMethod('find', find0)
people.addMethod('find', find1)
console.log(people.find()); // no param
console.log(people.find('bb'));//bb

收工

相关文章

  • JavaScript 函数重载 浅析

    什么是函数重载? 首先想声明下,什么是函数重载,javascript中不存在函数重载的概念,(其实是个伪命题)但一...

  • JavaScript函数重载

    说明 JavaScript 中没有真正意义上的函数重载。 函数重载 函数名相同,函数的参数列表不同(包括参数个数和...

  • JavaScript 函数重载

    概念 重载是指函数或者方法有相同的名称,但是参数个数或类型不相同的情形,这样的同名不同参的函数或者方法之间,互相称...

  • JavaScript函数重载

    转载自:作者Fundebug以及本文地址:https://blog.fundebug.com/2017/07/24...

  • JavaScript函数重载

    JQuery常用方法 $('.test') $('.test','td') $(['.test', 'td']) ...

  • JavaScript函数重载

    源代码 测试

  • 初识JavaScript函数Arguments模拟重载

    在 JavaScript 中并没有重载函数的功能,但每个函数中的 Arguments 对象可以模拟重载的实现。 1...

  • 函数迈出三小步(三)

    六、函数重载 6.1 JavaScript支持重载吗? 重载在通常的面向对象语言中这样定义:方法名相同参数列表不...

  • 02-JavaScript

    一、基础 1.函数的arguments 其实Javascript并没有重载函数的功能,但是Arguments对象能...

  • JS实现函数重载

    重载 做过后端的,可能有函数重载的概念 但是在JavaScript中不存在重载,如果方法名一样的话,后面的会把前面...

网友评论

    本文标题:JavaScript函数重载

    本文链接:https://www.haomeiwen.com/subject/bqavrktx.html