var obj=new Object();
obj.age=32;
obj.name='dream';

obj.getAge=function(){
document.write(arguments[0]);
return obj.age+23;
}
obj.getAge=function(addYear){
document.write(arguments[0]);
return obj.age+addYear;
}
document.write(obj.getAge());
document.write(obj.getAge(40));
请帮我分析一下结果,为什么是undefinedNaN4072呢?

解决方案 »

  1.   

    这种在java里叫做重载,在js里是不行的,默认后面吧前面方法给替换掉了.js里用参数来判断    var obj=new Object();
        obj.age=32;
        obj.name='dream';
        
        obj.getAge=function(addYear){
            document.write(arguments[0]);
            if(addYear) return obj.age+addYear;
            else return obj.age+23;
        }    document.write(obj.getAge());
        document.write(obj.getAge(40));
      

  2.   

    在JS中,会按照最后一个定义来确认的说。也就是说,如果你定义了两个function a,那么,前面的那个被你后面定义的给覆盖了。
      

  3.   


    <script type="text/javascript">  
        var obj=new Object();
        obj.age=32;
        obj.name='dream';    obj.getAge=function(){
            var dream=arguments.length==0?23 : arguments[0];    
            return obj.age+dream;
        }    document.write(obj.getAge()+"<br>");
        document.write(obj.getAge(40));</script>
      

  4.   

    你的这个需求只要考虑参数长度问题就可以了
    8楼的回帖只考虑了var dream=arguments.length==0?23 : arguments[0];   
    就是只考虑了无参数和一个参数的情况。实际上你还可以衍生出更多参数的处理办法
      

  5.   

     var obj=new Object();
        obj.getAge=function(){}
        obj.getAge=function(addYear){}
        楼主应该这么去理解:obj是个对象,而getAge是这个对象的属性,只不过这个属性比较特殊点,它存储的是一个函数的引用(也就是地址),所以getAge也叫obj对象的方法,既然getAge存的是引用,那么当你第二次给getAge赋值时,其实是改变了它所存储的地址,那getAge肯定就指向了你第二次赋给它的地址所代表的函数了,也就是说这时getAge已经与你第一个不带参的函数没一点关系了。