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 相关文章推荐
TextArea 控件的最大长度问题(js json)
Dec 16 Javascript
jQuery 选择器项目实例分析及实现代码
Dec 28 Javascript
基于JavaScript 下namespace 功能的简单分析
Jul 05 Javascript
jQuery操作表单常用控件方法小结
Mar 23 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
Aug 17 Javascript
简单快速的实现js计算器功能
Aug 17 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
Nov 07 Javascript
使用jquery Ajax实现上传附件功能
Oct 23 jQuery
原生JS生成指定位数的验证码
Oct 28 Javascript
react如何快速设置文件路径别名
Apr 28 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 smarty 二级分类代码和模版循环例子
2011/06/01 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
Python BS4库的安装与使用详解
2018/08/08 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
python中upper是做什么用的
2020/07/20 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
用Python制作音乐海报
2021/01/26 Python
以下的初始化有什么区别
2013/12/16 面试题
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
法制宣传教育方案
2014/05/09 职场文书
求职信内容怎么写
2014/05/26 职场文书
中药学自荐信
2014/06/15 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
初三英语教学计划
2015/01/23 职场文书
教师节老师寄语
2015/05/28 职场文书
论语读书笔记
2015/06/26 职场文书