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 定时局部刷新(setInterval)
Nov 19 Javascript
在JavaScript中获取请求的URL参数
Dec 22 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
Nov 22 Javascript
jquery each的几种常用的使用方法示例
Jan 21 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
jQuery添加和删除指定标签的方法
Dec 16 Javascript
JS中的eval 为什么加括号
Apr 13 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
Apr 08 Javascript
读懂CommonJS的模块加载
Apr 19 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
Aug 28 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中cookie的作用域
2008/03/27 PHP
mac下安装nginx和php
2013/11/04 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
jquery 可排列的表实现代码
2009/11/13 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
HTML的select控件美化
2017/03/27 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
详解python和matlab的优势与区别
2019/06/28 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
原料仓管员岗位职责
2014/04/12 职场文书
财务出纳岗位职责
2015/03/31 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python