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框架myJSFrame附API使用帮助
Jun 28 Javascript
jQuery淡入淡出元素让其效果更为生动
Sep 01 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
Node.js的环境安装配置(使用nvm方式)
Oct 11 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
Apr 17 Javascript
node实现登录图片验证码的示例代码
Apr 20 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
Sep 15 Javascript
解决vue热替换失效的根本原因
Sep 19 Javascript
Node.js实现批量下载图片简单操作示例
Jan 18 Javascript
Vue实现简单的拖拽效果
Aug 25 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
numpy下的flatten()函数用法详解
2019/05/27 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
html5使用canvas画三角形
2014/12/15 HTML / CSS
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
《小小竹排画中游》教学反思
2014/02/26 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis