您的位置:首页 > Web前端 > JavaScript

Javascript学习笔记之函数重载和类型检查

2010-02-01 14:36 681 查看
Javascript函数包含一个伪数组(pseudo-array),该数组包含所有传入参数,我们不能修改它,但可以访问其中的成员,该数组也具有length属性。

函数重载依赖于判断传入参数个数和类型的能力。

函数重载的例子:

<html>
<head>
<mce:script type="text/javascript"><!--
function sendMessage(msg,obj){
if(arguments.length == 2)
obj.handleMsg(msg);
else
alert(msg);
}

//一个接受任意数量参数并将其转换为数组的函数
function makeArray(){
var arr = [];
for(var i = 0;i < arguments.length;i++){
arr.push(arguments[i]);
}
return arr;
}

function displayerror(msg){
//如果没有提供参数,类型就是undefined
if(typeof msg == 'undefined'){
msg = "An error occurred.";
}
alert(msg);
}

//用一个变量类型列表严格检查一个参数列表
function strict(types,args){
if(types.length != args.length){
throw "Invalid number of arguments. Expectd "+
types.length+", received "+args.length+
" instead.";
}
//遍历所有参数,检查类型
for(var i = 0;i < args.length;i++){
if(args[i].constructor != types[i]){
throw "Invalid argument type. Expectd "+
types[i].name+", received "+
args[i].constructor.name+" instead.";
}
}
}

//打印用户列表
function userList(prefix,num,users){
//保证prefix是字符串,num是数字,users是数组
strict([String,Number,Array],arguments);
//遍历'num'个用户
for(var i = 0; i < num;i++){
//显示每个用户的信息
alert(prefix+": "+users[i]);
}
}
// --></mce:script>
</head>
<body>
<a onclick="sendMessage('how are you');">call1</a>
<a onclick="sendMessage('how are you',{handleMsg:function(msg){alert('This is a customer message:' + msg);}});">call2</a>
<a onclick="alert(makeArray(1,2,3,4,5));">call3</a>
<a onclick="displayerror();">call4</a>
<a onclick="displayerror('test');">call5</a>
<a onclick="userList('test',2,[1,2,3,4,5]);">call6</a>
</body>
</html>


 

我们可以使用typeof来进行类型检查,当要判断的类型时自定义对象时,typeof返回的是object。

if(typeof num == "string")
//解析成整数
num = parseInt(num);
if(typeof arr == "string")
//根据逗号切分出数组
arr = arr.split(",");


第二种检查对象类型的方法,需要引用所有javascript对象都具有的一个属性constructor,使用constructor进行类型检查更不容易犯错。

if(str.constructor == Array)
//根据数组用逗号归并出字符串
str = str.join(',');


typeof和constructor的区别:

变量typeofconstructor
{an:"object"}objectObject
{an:"array"}objectArray
function(){}functionFunction
"a string"stringString
55numberNumber
truebooleanBoolean
new User()objectUser
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息