JavaScript 的方法重载效果


Posted in Javascript onAugust 07, 2009

在 JavaScript 的方法内,有个叫做 arguments 的变量数组,它是只读的,所有实际传入的参数变量都
放在了里面,通过它,我们可以对传入的参数进行类型检查,从而实现重载的效果。
判断一个变量的类型有两种方法。
1,用 typeof 语句:

function check(){ 
if(typeof arguments[0] == 'string') 
alert('你传入的参数是个字符串'); 
else if(typeof arguments[0] == 'number') 
alert('你传入的参数是个数字'); 
}

2,用所有 JavaScript 变量都带有的一个属性 constructor,这个属性指向用来构造该变量的构造函数:
function check(){ 
if(arguments[0].constructor == String) 
alert('你传入的参数是个字符串'); 
else if(arguments[0].constructor == Number) 
alert('你传入的参数是个数字'); 
}

对照表:
typeof constructor
---------------------------
string String
number Number
object Object
function Function
boolean Boolean
object Array
object User
通过这个对照表可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判
断。
首先我们定义一个用来判断参数类型和个数的方法
function checkArgs(types,args){ 
// 检查参数个数 
if(types.length != args.length){ 
return false; 
} 
// 检查参数类型 
for(var i=0; i<args.length; i++){ 
if(args[i].constructor != types[i]){ 
return false; 
} 
} 
return true; 
}

我们定义一个方法对上面的方法进行应用
function show(){ 
// 处理参数是一个字符串的调用 
if(checkArgs([String],arguments)){ 
alert(arguments[0]); 
} 
// 处理参数是一个字符串和一个数字的调用 
else if(checkArgs([String,Number],arguments)){ 
var s = ''; 
for(var i=0; i<arguments[1]; i++){ 
s+=arguments[0]; 
} 
alert(s); 
// 参数不符合要求时,给予提示 
}else{ 
alert('不支持的参数'); 
} 
}

当我们定义的 JavaScript 方法对参数要求比较严格时,就可以用这样的方式来编写代码。
Javascript 相关文章推荐
js查找父节点的简单方法
Jun 28 Javascript
javascript引导程序
Oct 26 Javascript
juqery 学习之五 文档处理 插入
Feb 11 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
May 12 Javascript
jQuery聚合函数实例
May 21 Javascript
JQuery自适应窗口大小导航菜单附源码下载
Sep 01 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
Sep 19 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
Feb 24 Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 Javascript
openlayers实现地图弹窗
Sep 25 Javascript
vue里使用create, mounted调用方法
Apr 26 Vue.js
JQuery 小练习(实例代码)
Aug 07 #Javascript
js正确获取元素样式详解
Aug 07 #Javascript
JavaScript 乱码问题
Aug 06 #Javascript
jquery ui dialog里调用datepicker的问题
Aug 06 #Javascript
jquery select(列表)的操作(取值/赋值)
Aug 06 #Javascript
asp(javascript)全角半角转换代码 dbc2sbc
Aug 06 #Javascript
javascript Array.remove() 数组删除
Aug 06 #Javascript
You might like
php+mysql分页代码详解
2008/03/27 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
解析Python编程中的包结构
2015/10/25 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
对Python函数设计规范详解
2019/07/19 Python
python实现各种插值法(数值分析)
2019/07/30 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
如何强制垃圾回收
2015/10/06 面试题
2014年流动人口工作总结
2014/11/26 职场文书
骨干教师事迹材料
2014/12/17 职场文书
老公出轨后的保证书
2015/05/08 职场文书