您的位置:首页 > 其它

语言特性-函数重载与类型检查

2013-07-15 16:09 253 查看
函数重载要依赖于两点:判断传入参数数量的能力和判断传入参数类型的能力。

JS函数的参数列表,参数仅在函数内有效。参数列表是一个伪数组,可以访问其中的元素,具有.length属性,但是不能push()。

<script
language="javascript"
type="text/javascript">

function sendMessage(msg, obj) {

if (arguments.length == 2) {

obj.handleMsg(msg); //参数为函数的第一个参数

}

else {

alert(msg);

}

}

sendMessage("hello,javascript!");
//输出hello,javascript!

//将我们写好的对象传入,用handleMsg方法调

sendMessage("hello", {

handleMsg: function(msg) {
//此处方法必须和obj.handleMsg相同

alert("print:
" + msg);

}

}

);

//--------------------------------------

//一个接受任意数量参数,并将参数转化为数组的函数

function makeArray() {

var arr = [];

for (var i = 0; i < arguments.length; i++) {

arr.push(arguments[i]);

}

return arr;

}

//将makeArray函数实例化,并输出数组的每个值

function printArray() {

var array = makeArray("asd",
"42", 90, "bj", 900);

for (var i = 0; i < array.length; i++) {

alert(array[i]);

}

}

printArray();

//------------------------------------

//在函数中判断参数类型的时候,如果没有参数,那么其类型必定为undefined.

function displayError(msg) {

if (typeof msg == undefined) {

msg = "undefined";

}

msg = typeof msg;

alert(msg);

}

displayError("rxm");

//------------------------------------

//判断类型的时候有两张方法,

//一:typeof eg:typeof msg[当变量不是object或array时,这种方法很完美]

//二:引用所有JS对象都拥有的一个属性,这个属性引用的是构造该对象时候的函数[构造函数]

var msg =
"rxm,ru,rem";

var arr =
new Array();

if (msg.constructor ==

String) {

arr = msg.split(",");
//如果变量是字符串,将其切成数组

}

//------------------------------------

//用变量类型列表检查参数列表

function strict(types, args) {

if (types.length != args.length) {

throw
"变量参数的个数与函数列表不符!";

}

for (var i = 0; i < args.length; i++) {

if (args[i].constructor != types[i]) {

throw
"参数类型不符要求!";

}

}

}

function book(name, price, content) {

strict([String, Number, Array], arguments);

for (var i = 0; i < content.length; i++) {

alert(content[i]);

}

}

// book("", "", "sd");//抛出异常

book("语文", 90, ["春",
"夏",
"秋", "冬"]);

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