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 相关文章推荐
js substr、substring和slice使用说明小记
Sep 15 Javascript
javascript常见用法总结
May 22 Javascript
功能强大的Bootstrap效果展示(二)
Aug 03 Javascript
jQuery购物网页经典制作案例
Aug 19 Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 Javascript
表单元素值获取方式js及java方式的简单实例
Oct 15 Javascript
JS经典正则表达式笔试题汇总
Dec 15 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
JS+canvas绘制的动态机械表动画效果
Sep 12 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
Dec 07 Javascript
使用Layui搭建后台管理界面的操作方法
Sep 20 Javascript
React学习之受控组件与数据共享实例分析
Jan 06 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 curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
人力资源部经理岗位职责规定
2014/02/23 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
预备党员入党感言
2015/08/01 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS