重载方法

时间:2011-11-23 17:11:46

标签: javascript overloading

function Activity() {

this.LoadFile = function (path, targetElement) {

    $.ajax({
        url: path,
        dataType: 'html',
        success: function (data) {
            targetElement.html(data);
        }

    });
};

this.LoadFile = function (path, targetElement, onSuccess) {

    $.ajax({
        url: path,
        dataType: 'html',
        success: function (data) {
            targetElement.html(data);
            onSuccess(data);
        }

    });
};

}

如果我尝试传递2个参数,我得到onSuccess is not a function所以我认为这不起作用。是否可以在javascipt中使用重载?

3 个答案:

答案 0 :(得分:2)

在JS中无法直接指定重载方法。

许多解决方法。

在您的情况下,您可以使用3个参数定义函数:

function (path, targetElement, onSuccess)

如果仅使用2个参数调用该函数,onSuccess将为undefined

function (data) {
  targetElement.html(data);
  if (onSuccess) {
    onSuccess(data);
  }
}

您可能希望查看jQuery.Callbacks来处理事件回调,尽管可以使用.load重写您的函数。


对于来自Java / C#世界的程序员来说,重载学习JavaScript方式你可以使用这样的结构(不推荐,它只是一个熟悉的例子) :

function foo() {
  var fns = {};
  fns[0] = function () {
    //no params
  };
  fns[1] = function () {
    //1 param
  };
  fns[2] = function () {
    //2 params
  };
  fns[arguments.length]();
}

为每个“过载”提供单独的功能,但是它不是非常灵活,而且表现为计划不周的功能


通常,不是使用大量参数,而是使用单个options参数来包含可用参数:

function foo(options) {
  var settings = $.extend({}, foo.defaultSettings, options);
  //do stuff with settings
}
foo.defaultSettings = {
  bar: 'baz',
  fizz: 'buzz'
}

答案 1 :(得分:0)

没有。
Javascript不支持方法重载。

相反,您可以创建一个采用所有三个参数的方法,然后检查方法内部是否实际传递了第三个参数。 (所有Javascript函数参数都是可选的)

答案 2 :(得分:0)

还有另一种方法。不要在函数定义中给出任何参数,然后检查arguments数组()。您甚至可以检查给定参数的类型,以在函数内部进行分支。以下示例将提醒# 1 #Num(2)

/** 
 * Usage
 * example(number param1) 
 * example(string, number)
 */
function example() { // no parameters
    if (arguments.length == 1 && typeof arguments[0] == 'number') {
        alert(' # ' + arguments[0] + ' # ')
    }
    if (arguments.length == 2 && typeof arguments[0] == 'string' && typeof arguments[1] == 'number') {
        alert(arguments[0] + '(' + arguments[1] + ')')
    }

}
example(1);
example('Num', 2)