首页 > 其他分享 >如何实现一个函数重载的功能

如何实现一个函数重载的功能

时间:2023-06-13 14:13:11浏览次数:29  
标签:addImpl function 功能 getUsers 函数 args 重载 const fn

函数重载 将函数接收到的不同参数,进行不同处理。

import createOverLoad from './funReload.js'
const getUsers = createOverLoad()

getUsers.addImpl(() => {
    console.log('查询所有用户')
})

getUsers.addImpl('string', (name) => {
    console.log('根据name用户名查询用户')
})
getUsers.addImpl('string', 'string', (name, sex) => {
    console.log('根据性别查询用户')
})

const searchPage = (page, size=10) => {
    console.log('根据page和size查询')
}
getUsers.addImpl('number', searchPage)
getUsers.addImpl('number', 'number', searchPage)

--------------------------------------------------------------
getUsers('是谁','qwqw') //根据性别查询用户
getUsers('qwqw') //根据name用户名查询用户
getUsers(1,10) //根据page和size查询
getUsers()//查询所有用户

createOverLoad实现方法:

function createOverLoad(){
    const callMap = new Map()
    function overLoad(...args){
        const key = args.map(arg => typeof arg).join(',')
        // 根据剩余参数的类型 找到再map集合中对应需要处理的函数
        const fn = callMap.get(key)
        if(!fn){
            throw new TypeError('no matching the function')
        } else {
           return fn.apply(this, args)
        }
    }

    //addImpl 函数 用来创建一个函数枚举的map
    overLoad.addImpl = function(...args){
        const fn = args.pop()
        if(typeof fn !== 'function') {
            throw new TypeError('not a function')
        }
        const types = args
        callMap.set(types.join(','), fn)

    }

    return overLoad

}

export default createOverLoad

 

标签:addImpl,function,功能,getUsers,函数,args,重载,const,fn
From: https://www.cnblogs.com/xuhuang/p/17477342.html

相关文章

  • 【技术积累】JavaSciprt中的函数【一】
    什么是函数?如何声明函数?JavaScript中的函数是一段可重复使用的代码块,它可以接受输入并返回输出。在JavaScript中,函数是一种特殊的对象,因此可以将其存储在变量中,将其作为参数传递给其他函数,并从其他函数中返回。在JavaScript中,声明函数有两种方式:函数声明和函数表达式。1.函数......
  • 成功解决错误 CS8400 功能“创建目标类型对象”在 C# 8.0 中不可用。请使用语言版本 9
    成功解决错误CS8400功能“创建目标类型对象”在C#8.0中不可用。请使用语言版本9.0或更高版本。https://blog.csdn.net/RoseJFrame/article/details/129855616在使用ScottPlot例程中MultipleHistograms图表代码时遇到的问题错误CS8400功能“创建目标类型对象”在......
  • YouTube测试购物功能、 2021 最值得效力的科技公司榜单、2020 移动应用年度报告等|Deco
    5DecodetheWeek≠音视频技术周刊 Imagecurtesy of BarbaraColeNewsBriefing1. Google开始测试在YouTube上购物。Google正在测试一种简化的方式来帮助用户购买在视频中看到的商品。用户只需点击屏幕左下角的购物袋图标,YouTube就会显示出一个特色商品列表。用户可以查看......
  • 高颜值图片处理工具,集多种实用功能于一身
       地址:http://in-git.gitee.io/in-nav/#/ 功能点: 1.集成多款高质量图片滤镜,让您的图片瞬间提升颜值,更加精美。 2.支持多种格式转换,包括图片转换为base64、png、webp等格式,方便您在不同的场合使用。 3.图片压缩功能,快速缩小图片文件大小,方便存储和传输。 ......
  • DQL-聚合函数
           ......
  • C/C++学习(10)关于数组、内联函数、虚函数的错题集锦
    1、顺序存储方式不仅用于存储线性结构,还可以用于存放非线性结构,如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。 2、数组名有两重属性:1)数据结构的一个对象(数据结构为当前数组),在java中数组就是一个对象。2)某些情况下自动退化成指向第一个元素的常量指针。 3、有两......
  • 14.拷贝构造函数、静态、友元和预编译头
    拷贝构造函数静态友元预编译头拷贝构造函数eg:Playeer.h代码:#pragmaonceclassPlayeer{private:intnum;char*name;public:Playeer(intx,constchar*name);~Playeer();voiddisplay();//输出结果voidsetX(intx);//......
  • C语言,函数包含失败问题
    1.头文件包含顺序出错导致头文件中的函数无法使用eg:在主函数中调用support.h中的strcat()函数失败,但是明明已经包含了strcat()函数的头文件进来;编译器还是提示“Undefinedsysbolsupport(refreedfromxxx.o)”.以下函数只是简单举例,请不要直接拿来编译main中,先调用了includ......
  • 函数exit,参数 EXIT_FAILURE,参数EXIT_SUCCESS
    1、函数:exit()所在头文件:stdlib.h功能:关闭所有文件,终止正在执行的进程exit(0)表示正常退出exit(x)都表示异常退出,这个x是返回给操作系统的,以供其他程序使用return和exit:无论在哪里使用main都会终止程序,return只是将控制权交给递归的前一级。return和exit的区别......
  • 解压gzip数据流 和 file_get_contents()函数支持SSL错误和header
    file_get_contents()函数的相关参数,支持SSL错误和header $options=array("ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false,), "http"=>array('timeout......