javascript函数重载解决方案分享


Posted in Javascript onFebruary 19, 2014

JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?

办法总是有的,我们可以利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载。

1.根据参数个数重载

js判断传入参数数量可以用arguments.length这个属性来判断;

<script type="text/javascript">
function add() {
    if (arguments.length == 1) {
        alert(arguments[0] + 10);
    }
    else if (arguments.length == 2) {
        alert(arguments[0] + arguments[1]);
    }
}
//函数调用
add(10);
add(10, 20);
</script>

2.根据参数类型重载

判断变量类型的3种方法:
1.用 typeof 语句判断变量类型,typeof语句返回类型对应的字符串。
2.用 instanceof 语句判断变量类型,instanceof语句返回true/false。
3.用 constructor 属性判断变量类型,这个属性返回用来构造该变量的构造函数引用。
对照表:可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判断。

typeof string number object function boolean object object
constructor String Number Object Function Boolean Array User Define
<script type="text/javascript">
function add() 
{
    if (arguments.length == 0) return 0;
    var sum=0;
    for(var i=0; i<arguments.length; i++){
        if(arguments[i].constructor == Number){
        //或者改为:if(arguments[i] instanceof Number)
        //或者改为:if(typeof(arguments[i])=="number")
        sum += arguments[i];
      }
    }
    return sum;
}
//函数调用
alert(add(10));
alert(add(10,20));
</script>
Javascript 相关文章推荐
javascript 中对象的继承〔转贴〕
Jan 22 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
Jul 29 Javascript
代码分析jQuery四种静态方法使用
Jul 23 Javascript
javascript日期格式化方法小结
Dec 17 Javascript
JS获取子窗口中返回的数据实现方法
May 28 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
Feb 21 Javascript
ES6学习之变量的两种命名方法示例
Jul 18 Javascript
JS按条件 serialize() 对应标签的使用方法
Jul 24 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 Javascript
javascript实现滚轮轮播图片
Dec 13 Javascript
一个CSS+jQuery实现的放大缩小动画效果
Feb 19 #Javascript
使用CSS样式position:fixed水平滚动的方法
Feb 19 #Javascript
jQuery拖拽div实现思路
Feb 19 #Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 #Javascript
调用DOM对象的focus使文本框获得焦点
Feb 19 #Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 #Javascript
javascript动态向网页中添加表格实现代码
Feb 19 #Javascript
You might like
PHP 编写的 25个游戏脚本
2009/05/11 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
python3安装crypto出错及解决方法
2019/07/30 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
仓库主管的岗位职责
2013/12/04 职场文书
幼儿教师研修感言
2014/02/12 职场文书
秋季运动会广播稿
2014/02/22 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
创业计划书介绍
2019/04/24 职场文书
导游词之岳阳楼
2019/09/25 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书