.NET里面的方法重载用着的确很方便,哪Javascript里面能不能也哪样做呢?
Javasciprt里面本生是没有方法重载的功能,以前很多人的做法可能是直接少传参数过去,然后在根据参数是否为 "undefined" 未定义来决定怎么处理,从而实现类似方法重载的功能。
例如:
var showMessage = function(name,value,id){
        
if(id != "undefined"){
            alert(name
+value+id);
        }
        
else if(value != "undefined"){
            alert(name 
+ value);
        }
        
else{
            alert(name);
        }
    }
    
    showMessage(
"哈哈");
    showMessage(
"哈哈","??");
    showMessage(
"哈哈","??",124124);


今天在Ajaxian上面看到了一篇关于Javascript方法重载的写法,它是能过另外一个方法来实现的。
看一下这个代码:
// addMethod - By John Resig (MIT Licensed)
    function addMethod(object, name, fn){    
        
var old = object[ name ];
        object[ name ] 
= function(){
            
if ( fn.length == arguments.length ){
                   
return fn.apply( this, arguments );
               }
            
else if ( typeof old == 'function' ){
                  
return old.apply( this, arguments );
              }
          }
    };
    
    
var UserInfo = function(){
        addMethod(
this,"find",function(){
            alert(
"没有参数");
        });
        
        addMethod(
this,"find",function(name){
            alert(
"传入的参数是一个,叫 "+name);
        });
        
        addMethod(
this,"find",function(name,value){
            alert(
"传入了两个参数,一个叫 name="+name+" 一个叫 value="+value);
        });
    };
    
    
var userinfo = new UserInfo();
    userinfo.find();
    userinfo.find('我是谁?');
    userinfo.find('某某某','
1512412514');

看,这样一来就简单了......

原文地址:http://ajaxian.com/archives/javascript-method-overloading


posted on 2007-11-15 11:44 李华顺 阅读(1104) 评论(5)  编辑 收藏 所属分类: Javascript & Ajax

  回复  引用  查看    
2007-11-15 13:19 | t-mac.NET      
呵 js的重载也只能做到这一步了,,,按参数个数来重载
  回复  引用  查看    
2007-11-15 14:42 | Enzo      
通过匹配参数列表长度调用方法?
  回复  引用    
2007-11-16 08:58 | 银桦 [未注册用户]
哈喽,今天11月16号,进来看一看,回一回
博客呢,还瞒不错的,技术也越来越GOOD!
生活呢,也祝你越来越好!!!!!!!!
  回复  引用  查看    
2007-11-16 13:52 | 李华顺      
@银桦
11月16号?对你很特殊吗?今天是我的生日,你不会是我认识的朋友吧!
  回复  引用  查看    
2007-12-09 00:18 | bidaas      
学习了,第二种方法还不错.

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: