首页 > 代码库 > javascript方法重载惹的祸
javascript方法重载惹的祸
先贴出代码,看看执行结果会是什么?
function ShowMsg() {
//函数1 this.sure = function () { alert("ok"); };
//函数2 this.sure = function (msg) { alert(msg); };} var showMsg = new ShowMsg();showMsg.sure();
看上面的代码,本以为是两个方法重载的函数,执行后会弹出"ok"的信息。实则却弹出一个空字符的框。
原来定义javascript函数时,函数名是函数对象的标识,参数数量只是这个函数的属性。靠定义参数数量不同的函数实现重载是行不通的。
上面代码执行时,javascript通过函数名找到对应的函数对象,然后根据函数按照定义时的参数和表达式参数列表按顺序匹配,多余的参
数舍去,不够的参数按undefined处理,然后执行函数代码。
javascript重载函数需要通过函数代码判断参数值和类型实现,arguments是javascript里的一个内置对象,包含了调用时传递的实际参
数;上面的代码可以改为:
function ShowMsg() { this.sure = function () { if(arguments.length==0){ alert("ok"); } if(arguments.length==1){ if(arguments[0].constructor ==String){ alert(arguments[0]); } } };} var showMsg = new ShowMsg();showMsg.sure();
执行后会弹出"ok"。
javascript方法重载惹的祸
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。