我写了两个相同函数名,一个有参,一个无参,我调用了无参的,怎么会去调用有参的?
难道是无法识别的?

解决方案 »

  1.   

    js的重载不是那么用的,js的重载只能模拟,不能跟c#或其他语言似的,根据参数来决定,你定义的那样会第二个覆盖第一个。可以参考:http://www.jb51.net/article/1081.htm
      

  2.   

    function test(){
       if(arguments.length>0){
           alert('有参数:'+arguments[0]);
       }else{
           alert('无参数');
       }
    }test();
    test('kk');
      

  3.   


    function overridefn(){
    switch(arguments.length){
    case 1:
    (function(a){
    alert('只有一个参数:' + a);
    }).apply(this,arguments);
    break;
    case 2:
    (function(a,b){
    alert('两个参数:' + a + ' , ' + b);
    }).apply(this,arguments);
    break;
    default:
    (function(){
    alert('没有参数');
    }).apply(this);
    break;
    }
    }
    overridefn();
    overridefn(1);
    overridefn(1,2);
    虽然没有重载,但是我们可以模拟
      

  4.   

    7楼 牛
     js不可以重载原因是:(我的理解)var 是弱类型,所以无法通过参数的类型来重载,只有通过楼上switch(i)的方法来对参数个数的不同来重载,所以在一定程度上它就没有太大存在必要,因为它function(var a)就已经包括了各种基本数据类型;这就是javascript的好处;
      

  5.   

    javascript是脚本语言,这个才是重点
      

  6.   

    不是不能实现,但是不是你所说的叫话(重载)
    $.fn.wrapChildren = function(options) {
    var options = $.extend({
    childElem : undefined,
    sets : 1,
    wrapper : 'div',
    classet:''
    }, options || {});
    if (options.childElem === undefined) return this;
    return this.each(function() {
    var elems = $(this).children(options.childElem);
    var arr = [];
    elems.each(function(i,value) {
    arr.push(value);
    if (((i + 1) % options.sets === 0) || (i === elems.length -1)){
    var set = $(arr);
    arr = [];
    set.wrapAll($("<" + options.wrapper + ">").addClass(options.classet));
    }
    });
    });
    };
      

  7.   

    如果能看懂源码你看看jquery怎么写的:
    .animate( properties [, duration] [, easing] [, complete] )[]中参数可选的