重识 JavaScript —— 方法的重载(一)

JavaScript实现函数重载 函数重载是一种在JavaScript中定义多个同名函数,并根据传入参数的类型和数量来决定调用哪个函数的机制。需要注意的是,以上两种方法都是模拟函数重载的行为,实际上它们并不是真正的函数重载。在JavaScript中,函数名是唯一的,定义多个同名函数时,后面的函数会覆盖前面的函数。在JavaScript中,函数的参数是动态的,它们的类型和数量可以根据调用时的情况而变化。这种方法的缺点是,当函数需要支持更多的参数组合时,if语句的嵌套会变得非常复杂,代码可读性也会降低。属性和参数的类型来决定执行不同的操作。 阅读详情

关于脚本语言的误会

起初对于脚本语言,也就是刚开始学习 JS 的时候了,是带有一定的误会的,现在看来还挺好玩的,那时候觉得脚本语言就是弱语言也就是“很弱”的语言了,无法设计出很复杂的程序。

对不起,误会你了。

所以决定写一个重识(重拾)JS 系列的文章,以此谢罪。

方法的重载(Function overloading)

先看百度百科中对于方法重载的定义

方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。调用重载方法时,编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。

我们总结一下就是根据不同的参数情况来选择执行不同的程序。
依赖两件事情:方法中 参数数量 和 参数类型

1.参数数量:

方法参数伪数组(pseudo-array) -> arguments 这个数组具有.length 属性来获取参数列表的长度 arguments.length

实验一 —— 使用这个方法的参数伪数组写一个任意个参数求和
// 接受多个参数求和的方法
var addAll = function() {
    var sum = 0;
    for(var i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}

var result1 = addAll(1,2,3,6);
var result2 = addAll(6,4,5,9,1,9,8,58);
console.log("result1: " + result1);
console.log("result2: " + result2);
// 输出
// result1: 12
// result2: 100  

2. 参数类型:

typeof typeof obj == “object” 构造函数属性:constructor 属性 str.constructor == Array

这里写图片描述

实验二 —— 检查参数类型

我们回头看一下实验一中存在一个问题就是如果在调用函数 addAll 时传入一个字符串会得到一个错误的结果。聪明的你肯定已经想到办法了,在遍历方法参数数组时判断 typeof arguments[i] == “number” 或者 arguments[i].constructor == Number

每次都这样去检查参数类型很累,当然我们可以写一个通用一点的检查参数的方法,来确保我们函数的输入。

// 严格检查参数列表
// args: types Array 检查参数的类型数组
//       args Array 方法中的 arguments
var checkArguments = function(types, args) {
    // 检查参数数量
    if( types.length != args.length) {
        throw "参数数量异常:类型数量:" +  types.length + ",参数数量:" + args.length;
    }
    for(var i = 0; i < arguments.length; i++) {
        if(args[i].constructor != types[i]) {
            throw "参数类型异常:参数" + args[i] + "的类型为 " + args[i].constructor.name + " 检查的类型为:" + types[i].name ;
        }
    }
}

// 接受两个参数求和的方法
var addTwo = function() {
    checkArguments([Number,Number],arguments);
    var sum = 0;
    for(var i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}

var result3 = addTwo(2, 6);
console.log("result3: " + result3); // 输出 result3: 8
// addTwo(1, "1"); // 输出 Uncaught 参数类型异常:参数1的类型为 String 检查的类型为:Number
addTwo(3, 4, 5); // 输出 Uncaught 参数数量异常:类型数量:2,参数数量:3

知道了上面的 JS 对于方法参数长度和参数类型的判断方法之后,我们就可以来重载方法了。

实验三 —— 方法的重载为你推荐歌曲
// 根据不同的参数推荐不同的歌曲
var playSomething = function() {
    if(arguments.length == 1) {
        if(arguments[0].constructor == Object) {
            console.log("Hey!sing Dog!"); // object not found
        }else {
            console.log("单身情歌");
        }   
    }else if(arguments.length == 2) {
        if(arguments[0].constructor != arguments[1].constructor) {
            console.log("有情人终成兄妹");
        }else{
            console.log("好心分手");
        }   
    }else if(arguments.length == 3) {
        console.log("圣诞节-红花会");
    }else {
        console.log("学会了"); // xixi, 学会了吗
    }
}

playSomething({name:"Dog"});
playSomething("达尔文","埃玛");
playSomething("pig",{name:"pig"});
playSomething("PG ONE","李小璐","贾乃亮");
playSomething("java","python","node","lua","php","swift","javascript");
// Hey!sing Dog!
// 好心分手
// 有情人终成兄妹
// 圣诞节-红花会
// 学会了
// Here with You <- 悄悄加的,不知道会不会被人发现
【FPGA】DDR3调试总结 DDR3管脚根据不同的功能可以分为:数据组、地址组、控制组和电源组。如图上所示,共96个管脚。 阅读详情

相关推荐

C#实战:如何用HslCommunication快速搞定三菱FX5U PLC通讯(附完整代码)

本文详细介绍了如何利用HslCommunication库在C#环境中快速实现与三菱FX5U PLC的通讯。通过实战代码演示,从环境搭建、建立连接、核心数据读写到构建健壮的监控服务,系统讲解了如何高效完成数据采集与交互,大幅提升工业自动化项目的开发效率。

s4t5u6v的博客 1199

JS中如何实现重载

什么是重载?相同函数名,不同形参列表的多个函数,可以在调用时根据传入的实参值的不同,执行不同的逻辑。好处:减少函数名的个数,减轻调用者的负担如何实现呢?在JS中是禁止两个同名函数同时存在的,如果同时存在,后面定义的函数会覆盖前面的函数,可以借助arguments来解决。什么是arguments?函数中自带的,不需要自己定义,它是一个类数组对象。什么是类数组?长得像数组,有下标,有length属性,也可以循环。不同的是数组是Array类型的对象,类数组是Object对象。类数组无权使用数组的方法如何实现重载?

weixin_45982458的博客 2355

多智能体协作的本质是中介者模式,不是多开Agent

多智能体系统并非简单启动多个Agent实例,而是一种受控的、可验证的动态交互过程。其核心原理在于解耦Agent间直接依赖,通过中央中介者统一管理任务分发、协议转换、状态协调与故障兜底。这种架构显著提升系统的可观测性、容错性与可维护性,技术价值体现在强一致性保障(如金融订单原子操作)与灵活自治平衡(如边缘设备轻量协同)。典型应用场景包括电商客服协同、工业巡检调度、飞书/微信多渠道智能服务等。OpenClaw与Hermes Agent正是这一范式的工程落地代表,分别体现强中介与弱中介两种演进路径。

weixin_34151004的博客 358

JavaScript函数重载(js函数重载)

JavaScript函数重载(js函数重载) 一个猜测 猜测 Java中的方法(函数)重载:类里面的两个或多个重名的方法,方法的参数个数、类型至少有一个不一样,构成了方法重载。 由于js参数类型都为var,我们由此提出大胆猜测:js函数重载只能通过形参的个数不同来区分。 验证 来操作一波: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js函数重载&l

emmm520的博客 3040

FAST-LIO2实战:如何在无人机上部署并实现厘米级定位(附ROS配置全流程)

本文详细介绍了如何在无人机上部署FAST-LIO2激光雷达惯性里程计系统,以实现厘米级精确定位。内容涵盖从硬件选型(如激光雷达与机载计算机)、软件环境配置(ROS Noetic)、传感器标定,到FAST-LIO2参数调优、与PX4飞控集成以及实际飞行测试的全流程。重点解决了实时定位中的外参标定、数据同步等关键问题,为无人机在无GPS或复杂光照环境下提供稳定可靠的定位解决方案。

weixin_29062865的博客 249

【YOLOv8实战】从零构建番茄成熟度智能检测GUI系统【附完整工程】

本文详细介绍了从零构建基于YOLOv8的番茄成熟度智能检测GUI系统的完整实战流程。内容涵盖环境搭建、数据集准备、模型训练调优,并重点讲解如何使用PyQt5开发图形界面,最终将项目打包为可执行文件,实现AI模型从训练到桌面应用落地的完整工程闭环。

xxx12的博客 821

JS函数重载

函数重载是一种编程技术,它允许程序员定义多个同名函数,但这些函数可以接受不同类型和数量的参数。通过函数重载,程序员可以简化代码,提高代码的可读性和可维护性。

m0_68320270的博客 545

Hermes Agent 安装部署完全指南

Hermes Agent安装部署指南提供了两种安装方式:一键脚本安装和手动分步安装。该AI助手支持多平台运行(Linux/macOS/WSL2),核心功能仅需Git作为前置依赖,其他依赖如Python、Node.js等均由安装脚本自动处理。文档详细介绍了系统要求、依赖管理、配置目录结构、环境变量设置以及10个手动安装步骤,并提供了功能模块化选项,用户可根据需求选择安装语音交互、浏览器自动化等扩展功能。安装完成后可通过hermes doctor命令验证环境,并通过交互式向导完成初始化配置。

简简单单Onlinezuozuo 2618

闭包的应用———原生js实现方法的重载

闭包的应用———原生js实现方法的重载

YX0711的博客 402

uniapp(全端兼容) - 最新详细实现pdf在线预览功能,uniapp内置预览PDF文件功能,uniapp在安卓app|苹果app|h5网页网站|微信小程序中打开pdf进行在线预览(详细示例源码)

uni-app,安卓Android,苹果ios,App端,H5网页,移动端网站,微信小程序,支付宝小程序,nvue,vue,pdf文档,pdf文件,office,uniapp 预览pdf,uniapp怎么做pdf预览,uniapp如何实现全平台兼容的pdf在线预览,uniapp怎么在h5打开pdf文档,实现PDF在线预览,H5移动端文件预览pdf,文件下载和预览,uniapp App端pdf文件预览,app移动端在线预览pdf文件,无法预览pdf怎么办,有没有预览pdf的插件,根本打不开咋办,uniapp使

✅ 精选推荐文章 1万+

算法 | 植物根茎生长优化算法(PRGO)原理、公式及应用,matlab代码(2025最强优化算法)

【代码】算法 | 植物根茎生长优化算法(PRGO)原理、公式及应用,matlab代码(2025最强优化算法)

尘世冰封的专栏 1015

js方法重载

平时都是写java,今天需要修改下前端的一个bug,遇到了这个问题;有些疑惑,所以试验了下; 我理解的方法重载:具有相同方法名,且参数列表个数或类型任一不同;调用方根据不同的输入调用对应匹配的方法; 先说结论:js不支持方法重载。 最好的证明就是写个例子跑下; 验证: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> &l

Dreams_KS的博客 3231

Python数据可视化 Pyecharts 制作 Map 地图

大家好,我是Mr数据杨。想象一下,作为一名军师,如诸葛亮或郭嘉,'Map’就如同那战争的沙盘,兵马行动的轨迹,都需要准确的地图作为基础。‘基本设置’,就如同摆设这张战争沙盘,规定棋子的起始位置。‘数据配置选项’和’地图数据项’,就好比是军师们手中的情报,了解各路诸侯的兵力、粮草、地形等重要信息,以便于他们更好地布局。‘Demo’则代表着练兵之地,军师们可以在此基于已有数据,试验各种战术。

Mr数据杨 4万+

实现JavaScript 方法重载

实现JavaScript 方法重载 目录:实现JavaScript 方法重载1、介绍2、JavaScript重载实现2、案例3、总结 1、介绍 ​ 在一个对象中多个方法名称相同,但函数的形参不同(数量、类型、顺序不同),我们将其称之为函数重载。 ​ 但在JavaScript中方法重载一般只考虑参数的数量不同,实现过程与其他的语言类型中的构造也有区别。因为JS中方法的预解析其实是通过匿名函数而来的,函数名其实和变量名是同一个作用,在同一个作用域之内只允许出现一次相同的变量名称,后面重复出现的名称会被覆盖

abraham_ly的博客 1249

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JavaScript 之 JS重载

参考文章:https://www.cnblogs.com/yugege/p/5539020.html Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型 这一切的根源就是:JS中的函数名只是一个指针,而不是一个函数签名 所以当我们在JS中声明同名函数的时候,实际上就是让已经指向一个函数的指针指向另外一个函数,自然也就不能实现重载了 在《JavaScrip...

weixin_30393907的博客 205

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JavaScript中的方法重载

对js有些了解的人都知道,在js中根本就不存在像C#中的那种方法重载,而有的只是方法的覆盖,当你在js中敲入两个或多个同名的方法的时候,不管方法(函数)的参数个数怎么个不同,这个方法名只能属于最后定义的那个函数。也就是说后一个方法会把前面同名的方法给覆盖掉。 我们看一段下面的代码: function sayHi() { alert("你好,我是第一

阴慧超的博客 9139

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JavaScript的重载

函数的重载:理论上来说,函数的重载就是两个及两个人以上的同名函数,而这些函数的参数的个数、类型或者顺序必须不同,也就是相同的函数完成不同的功能。 理论上JavaScript是不存在重载的,或者说js函数不能被重载。如下例子: 将函数二注释后只用第一个函数进行验证的时候,发现输出的结果为2; 当把第二个函数放开的时候,表面上符合重载的定义,函数 名相同,但是输出结果却不是我们预想的结果,它把...

Forsake_的博客 613

JS方法/函数重载的姿势

JavaScript不支持重载的语法,它没有重载所需要的函数签名。尽管JavaScript无法做到真正的重载,但是可以通过检查传入函数中参数的类型和数量并作相应的处理,从而实现重载的效果,曲线救国。

ambit_tsai的博客 7667

JS - 实现重载

JS中实现重载 javascript不能支持函数的重载,如下: 代码如下: <script language="JavaScript"> function f(length) { alert("高为:"+length); } function f(length,width) { alert("高为:"+length+",宽为:"+width); } ...

qq_44352182的博客 4608

javaScript如何通过实现函数重载JS模拟函数重载

JS语法不支持重载特效,但是我们可以变通一下,通过函数的arguments参数实现 arguments介绍 先来介绍一下arguments arguments是每个函数中自带的,用来存放函数的所有参数的一个类数组对象 先来看看它长什么样 如上图:它像数组一样拥有下标,也有属性length,代表参数的个数 那arguments到底是什么类型,且看下图 原来arguments的类型是Object 使用时注意: 可以像使用数组一样通过下标获取参数值 通过length属性获取参数个数 它是Object类型,

点燃火柴的博客 407

Javascript-js不允许函数重载

Javascript-js不允许函数重载 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> function fun(a,b) { alert("有参函数fun(a,b)")

我就吃一口的BLOG 521

js 中的函数重载实现

&lt;!-- 关于 js 中的函数重载 1.在 《js高级程序设计》 中告诉我们,js不支持函数重载,那么如果出现函数明相同的情况下,后者会覆盖前者。 2.简单区别一下 函数重载 和 函数重写 函数重载:函数名相同,函数的参数不同 (包括参数的类型和个数) 函数重写:函数名,参数和返回值都相同 3.其实js中的函数重载还...

HH 1424

js重载的实现

JS不是面向对象的语言,又是弱语言类型,有时候需要对一些函数进行重载,在JS机制中可以模拟"重载"  在JS的函数执行上下文中有一个名为arguments的有意思的变量,它以数组的形式存储了函数执行时传递过来的所有参数,即使函数定义没有定义这 么多个形参。还有一个特别之处就是跟Array类型相比,arguments变量有且只有一个length属性,Array的方法,例如push、pop 等,它并不

牧码人的专栏 6523

javascript中的方法重载

在很多面向对象的高级语言中,都有方法的重载。而javascript没有方法重载这个概念。但是我们可以通过arguments这个参数来伪装成函数的重载 在模拟之前我们先看一下代码: //表面上没有声明形式参数的函数 function fun() { alert("示例代码"); } ...

185

javascript的方法重载

&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="utf-8"/&gt; &lt;title&gt;&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;script&gt; //不存在方法

victo_chao的博客 390

JavaScript的函数支持重载吗?

JavaScript的函数支持重载吗?对于这个问题,主要有两个点,第一,JavaScript的函数;第二,重载。         首先,说一下重载。所谓重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。所以说,重载主要需要两点:第一,同样的函数名。第二,不同的函数参数。         明确了重载的定义之后,

犹在耳畔 1万+
上一篇: 【问题解决】Auth 2.0 登录成功回调方法
下一篇: 重识 JavaScript —— 作用域(二)
xiaoping0915
博客等级 码龄12年 158粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值