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 相关文章推荐
IE8 浏览器Cookie的处理
Jan 31 Javascript
js取得html iframe中的元素和变量值
Jun 30 Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 Javascript
js中document.write的那点事
Dec 12 Javascript
使用RequireJS库加载JavaScript模块的实例教程
Jun 06 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
微信小程序模板之分页滑动栏
Feb 10 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 Javascript
react-native DatePicker日期选择组件的实现代码
Sep 12 Javascript
js将键值对字符串转为json字符串的方法
Mar 30 Javascript
react-native android状态栏的实现
Jun 15 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
Aug 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
Email+URL的判断和自动转换函数
2006/10/09 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
js计数器代码
2006/11/04 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
简略的前端架构心得&&基于editor为例子的编码小技巧
2010/11/25 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
pycharm显示远程图片的实现
2019/11/04 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
在keras里实现自定义上采样层
2020/06/28 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
幼儿园教师备课制度
2014/01/12 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
python编写函数注意事项总结
2021/03/29 Python