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前台数据获取实现代码
Mar 16 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
Feb 27 Javascript
多个datatable共存造成多个表格的checkbox都被选中
Jul 11 Javascript
Juery解决tablesorter中文排序和字符范围的方法
May 06 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
May 25 Javascript
浅析javascript的return语句
Dec 15 Javascript
简单实现的JQuery文本框水印插件
Jun 14 Javascript
JavaScript实现左右下拉框动态增删示例
Mar 09 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
在vue项目中,使用axios跨域处理
Mar 07 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
Jun 11 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
Sep 10 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之COOKIE支持详解
2010/09/20 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
Angularjs 基础入门
2014/12/26 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
python基础教程之Hello World!
2014/08/29 Python
python简单的函数定义和用法实例
2015/05/07 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
python 字典(dict)按键和值排序
2016/06/28 Python
python实现二叉树的遍历
2017/12/11 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python3.x实现base64加密和解密
2019/03/28 Python
python3调用windows dos命令的例子
2019/08/14 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
深入了解Python enumerate和zip
2020/07/16 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
浅析python函数式编程
2020/09/26 Python
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
医科大学生的自我评价
2013/12/04 职场文书
学生党员思想汇报
2013/12/28 职场文书
医院实习接收函
2014/01/12 职场文书
司机岗位职责说明书
2014/07/29 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
奖学金感谢信
2015/01/21 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
Python使用Web框架Flask开发项目
2022/06/01 Python