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 css函数用法(判断标签是否拥有某属性)
May 28 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
JS随机生成不重复数据的实例方法
Jul 17 Javascript
JavaScript动态创建link标签到head里的方法
Dec 22 Javascript
javascript编写实用的省市选择器
Feb 12 Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
Vue.js原理分析之observer模块详解
Feb 17 Javascript
validationEngine 表单验证插件使用实例代码
Jun 15 Javascript
使用vux实现上拉刷新功能遇到的坑
Feb 08 Javascript
vue-router权限控制(简单方式)
Oct 29 Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 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
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
jquery常用操作小结
2014/07/21 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
python实现简易数码时钟
2021/02/19 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
公司企业表扬信
2014/01/11 职场文书
女娲补天教学反思
2014/02/05 职场文书
党课培训主持词
2014/04/01 职场文书
小学生环保倡议书
2014/05/15 职场文书
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL