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 相关文章推荐
Jquery动态改变图片IMG的src地址示例
Jun 25 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
Sep 25 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
PHP PDO操作总结
Nov 17 Javascript
jquery获取节点名称
Apr 26 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
Jun 16 Javascript
JavaScript Math.round() 方法
Dec 18 Javascript
jQuery实现Select左右复制移动内容
Aug 05 Javascript
vue中slot(插槽)的介绍与使用
Nov 12 Javascript
微信小程序一周时间表功能实现
Oct 17 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
Apr 09 Javascript
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
php pki加密技术(openssl)详解
2013/07/01 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
python批量修改文件后缀示例代码分享
2013/12/24 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
卫校中专生个人自我评价
2013/09/19 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
党员干部公开承诺书
2014/03/26 职场文书
律师授权委托书范本
2014/10/07 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
大学生学期个人总结
2015/02/12 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
一级电子管军用接收机测评
2022/04/05 无线电
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL