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检测input checked 控件是否被选中的方法
Mar 26 Javascript
jQuery产品间断向下滚动效果核心代码
May 08 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
Dec 09 Javascript
深入分析原生JavaScript事件
Dec 29 Javascript
xcode中获取js文件的路径方法(推荐)
Nov 05 Javascript
BOM之navigator对象和用户代理检测
Feb 10 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
Jun 25 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
Dec 19 jQuery
AngularJS下$http服务Post方法传递json参数的实例
Mar 29 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
Nov 15 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
php的curl封装类用法实例
2014/11/07 PHP
php实现过滤UBB代码的类
2015/03/12 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
JS原型链怎么理解
2016/06/27 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
Python类及获取对象属性方法解析
2020/06/15 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
美术国培研修感言
2014/02/12 职场文书
委托书的写法
2014/08/30 职场文书
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python