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 相关文章推荐
jquery中通过过滤器获取表单元素的实现代码
Jul 05 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
js 判断文件类型并控制表单提交示例代码
Nov 14 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
AngularJS 基础ng-class-even指令用法
Aug 01 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
js+css3实现旋转效果
Jan 20 Javascript
JavaScript创建对象_动力节点Java学院整理
Jun 27 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
Nov 13 Javascript
vue安装遇到的5个报错及解决方法
Jun 12 Javascript
基于vue、react实现倒计时效果
Aug 26 Javascript
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错误提示的关闭方法详解
2013/06/23 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
关于axios如何全局注册浅析
2018/01/14 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
Python ZipFile模块详解
2013/11/01 Python
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
Python中的自省(反射)详解
2015/06/02 Python
Python切片操作实例分析
2018/03/16 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
django认证系统 Authentication使用详解
2019/07/22 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
Android面试题及答案
2015/09/04 面试题
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
大学生评语大全
2014/04/18 职场文书
建筑管理专业求职信
2014/07/28 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
作文评语怎么写
2014/12/25 职场文书
python字典的元素访问实例详解
2021/07/21 Python