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 相关文章推荐
Javascript中的Split使用方法与技巧
Mar 09 Javascript
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
jQuery实现可收缩展开的级联菜单实例代码
Nov 27 Javascript
js模拟点击以提交表单为例兼容主流浏览器
Nov 29 Javascript
JS拖拽组件学习使用
Jan 19 Javascript
js入门之Function函数的使用方法【新手必看】
Nov 22 Javascript
Vue自定义指令拖拽功能示例
Feb 17 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
Jun 08 Javascript
jQuery实现键盘回车搜索功能
Jul 25 jQuery
react native带索引的城市列表组件的实例代码
Aug 08 Javascript
JS实现电话号码的字母组合算法示例
Feb 26 Javascript
80行代码写一个Webpack插件并发布到npm
May 24 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 无法载入mysql扩展
2010/03/12 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
python通过yield实现数组全排列的方法
2015/03/18 Python
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Django中使用locals()函数的技巧
2015/07/16 Python
Python 处理数据的实例详解
2017/08/10 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
Ibatis如何使用动态表名
2015/07/12 面试题
接口可以包含哪些成员
2012/09/30 面试题
护士专业推荐信
2013/11/02 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
企业宣传标语
2014/06/09 职场文书
音乐幼师求职信
2014/07/09 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
募捐感谢信
2015/01/22 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
python热力图实现的完整实例
2022/06/25 Python