码迷,mamicode.com
首页 > 编程语言 > 详细

javascript方法重载惹的祸

时间:2015-01-15 21:51:22      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

先贴出代码,看看执行结果会是什么?

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方法重载惹的祸

标签:

原文地址:http://www.cnblogs.com/paulhe/p/4226080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!