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系列(33):设计模式之策略模式详解
Mar 03 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
May 14 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
Feb 25 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
javascript的函数劫持浅析
Sep 26 Javascript
EasyUI实现下拉框多选功能
Nov 07 Javascript
vue的全局提示框组件实例代码
Feb 26 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
Jan 20 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
Feb 21 Javascript
微信小程序实现传递多个参数与事件处理
Aug 12 Javascript
vscode中Vue别名路径提示的实现
Jul 31 Javascript
五句话帮你轻松搞定js原型链
Dec 09 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学习之数组值的操作
2011/04/17 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
Python实现简单状态框架的方法
2015/03/19 Python
python executemany的使用及注意事项
2017/03/13 Python
python 重定向获取真实url的方法
2018/05/11 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
物流管理应届生求职信
2013/11/07 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
企业安全标语
2014/06/07 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
干部对照检查材料范文
2014/08/26 职场文书
公司庆典欢迎词
2015/01/26 职场文书