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 EasyUI 对话框的使用方法
Oct 24 Javascript
window.open的页面如何刷新(父页面)上层页面
Dec 28 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
Apr 15 Javascript
JS不间断向上滚动效果代码
Dec 25 Javascript
jQuery的观察者模式详解
Dec 22 Javascript
javascript操作符"!~"详解
Feb 10 Javascript
AngularJs  unit-testing(单元测试)详解
Sep 02 Javascript
移动端web滚动分页的实现方法
May 05 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
Angular8基础应用之表单及其验证
Aug 11 Javascript
基于javascript处理二进制图片流过程详解
Jun 08 Javascript
jQuery-App输入框实现实时搜索
Nov 19 jQuery
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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
桌面中心(四)数据显示
2006/10/09 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
php里array_work用法实例分析
2015/07/13 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
JavaScript 学习笔记(十一)
2010/01/19 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
python logging日志模块以及多进程日志详解
2018/04/18 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
舞蹈教育学专业求职信
2014/06/29 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
初三语文教学计划
2015/01/22 职场文书
展览会邀请函
2015/02/02 职场文书
中秋节祝酒词
2015/08/12 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书