Javascript学习笔记之函数重载和类型检查
2010-02-01 14:36
681 查看
Javascript函数包含一个伪数组(pseudo-array),该数组包含所有传入参数,我们不能修改它,但可以访问其中的成员,该数组也具有length属性。
函数重载依赖于判断传入参数个数和类型的能力。
函数重载的例子:
我们可以使用typeof来进行类型检查,当要判断的类型时自定义对象时,typeof返回的是object。
第二种检查对象类型的方法,需要引用所有javascript对象都具有的一个属性constructor,使用constructor进行类型检查更不容易犯错。
typeof和constructor的区别:
函数重载依赖于判断传入参数个数和类型的能力。
函数重载的例子:
<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的区别:
变量 | typeof | constructor |
---|---|---|
{an:"object"} | object | Object |
{an:"array"} | object | Array |
function(){} | function | Function |
"a string" | string | String |
55 | number | Number |
true | boolean | Boolean |
new User() | object | User |
相关文章推荐
- C++ 学习笔记(14)重载运算与类型转换、函数对象、function库
- 面向对象的 Javascript 函数重载和类型检查
- 面向对象的 Javascript 函数重载和类型检查
- JavaScript高级程序设计学习笔记第五章--引用类型(函数部分)
- javascript学习笔记—判断值和函数的类型
- 面向对象的 Javascript 函数重载和类型检查
- javascript学习笔记—判断值和函数的类型
- 精通JavaScript —— 函数重载和类型检查
- JavaScript 学习笔记 五 函数
- JavaScript高级程序设计(第2版) 学习笔记:(一)js函数依赖性
- javascript学习笔记(三) String 字符串类型介绍
- JavaScript学习笔记04-函数
- javaScript语言精粹 学习笔记(4.3函数调用)
- JavaScript 学习笔记(1):关于函数、对象以及面向对象
- Javascript学习笔记-----类型、值和变量
- JavaScript学习笔记:判断变量是否为undefined,判断变量和函数是否声明
- javascript学习笔记:function类型
- 【C++学习笔记】函数的重载
- JavaScript学习笔记-函数
- 【JavaScript学习笔记】函数