Javascript基础 函数“重载” 详细介绍


Posted in Javascript onOctober 25, 2013

Javascript不像其他编程语言一样具有函数签名(什么是函数签名,简单的说就是说函数的接受参数类型和参数个数,也有人认为返回类型也应该包括。具体概念大家可以到网上查询)。

所以Javascript是不能像其他语言一样实现方法名相同,参数个数不同…的这类重载的,不信你可以试试:

         function show(){
             alert("1");
         }
         function show(num1){
             alert(num1);
         }         window.onload=function(){
             show();
             show(2);
         }

断点调试下,不带参数的show方法是不会被执行的,它会被show(num1)方法给覆盖掉。

那么Javascript中就不可以实现“重载”了么?答案是可以的,只是是另一种方式而已。对,就是利用arguments。

那么什么是arguments呢?在JS中它是一个特殊的属性,它可以像数组一样通过下标索引获取参数的值(但它不是数组),通过length获取参数个数:

         function showParamsCount(){
             alert("参数个数:"+arguments.length);//输出:参数个数:4
             alert("下标索引为3的参数:"+arguments[3]);//输出: 下标索引为3的参数:你好
         }         window.onload=function(){
             showParamsCount("Hello",4,5,"你好");
         }

还要知道的一点是JS中函数的命名参数不是必须的,所以要想知道调用时传递了多少个参数还是得通过arguments获取参数。

下面就实现一个简单的方法重载:

         function showMessage(){
             if(arguments.length==1){
                 alert(arguments[0]);
             }else if( arguments.length==2){
                 alert(arguments[0]+"说:"+arguments[1]);
             }else{
                 return false;
             }
         }         window.onload=function(){
             showMessage("Hi!");
             showMessage("张三","Hi 你妹");
         }

这样JS的重载算是实现了。

在看js高级程序设计这本书的时候发现arguments的值与对应命名参数的值永远同步,以前没注意过这个问题

         function showMessage(name,msg){
             arguments[1]="我可以改变msg的值";
             alert(name+"说:"+msg);//输出:张三说:我可以改变msg的值
         }         window.onload=function(){
             showMessage("张三","Hi 你妹");
         }

好吧关于js“重载”的基础知识就这么些

Javascript 相关文章推荐
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
Apr 07 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
DOM操作一些常用的属性汇总
Mar 13 Javascript
jquery ajax分页插件的简单实现
Jan 27 Javascript
Jquery组件easyUi实现表单验证示例
Aug 23 Javascript
jQuery开源组件BootstrapValidator使用详解
Jun 29 jQuery
使用重写url机制实现验证码换一张功能
Aug 01 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 Javascript
详解ES6中的三种异步解决方案
Jun 28 Javascript
在vue中使用G2图表的示例代码
Mar 19 Javascript
jquery实现简易验证插件封装
Sep 13 jQuery
JS关闭窗口或JS关闭页面的几种代码分享
Oct 25 #Javascript
jquery及原生js获取select下拉框选中的值示例
Oct 25 #Javascript
Jquery 模拟用户点击超链接或者按钮的方法
Oct 25 #Javascript
各种常用的JS函数整理
Oct 25 #Javascript
jquery索引在使用中的一些困惑
Oct 24 #Javascript
各种页面定时跳转(倒计时跳转)代码总结
Oct 24 #Javascript
js 浏览本地文件夹系统示例代码
Oct 24 #Javascript
You might like
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php curl 上传文件代码实例
2015/04/27 PHP
php根据生日计算年龄的方法
2015/07/13 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
详解jQuery中的事件
2016/12/14 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
详解vue 组件
2020/06/11 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
通过Python实现自动填写调查问卷
2017/09/06 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
优秀信贷员先进事迹
2014/01/31 职场文书
汇源肾宝广告词
2014/03/20 职场文书
校企合作协议书
2014/04/16 职场文书
提拔干部考察材料
2014/05/26 职场文书
部门2014年度工作总结
2014/11/12 职场文书
离婚协议书怎么写
2015/01/26 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
爱国之歌(8首)
2019/09/29 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server