Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重载方法_Javascript_Overloading - Fatal编程技术网

Javascript 重载方法

Javascript 重载方法,javascript,overloading,Javascript,Overloading,} 如果我尝试传递两个参数,我会得到onSuccess不是一个函数,所以我认为这不起作用。可以在javascipt中使用重载吗?否。 Javascript不支持方法重载 相反,您可以创建一个接受所有三个参数的方法,然后在方法内部检查第三个参数是否已实际传递。(所有Javascript函数参数都是可选的)在JS中无法直接指定重载方法 有许多变通办法 在您的情况下,可以使用3个参数定义函数: function Activity() { this.LoadFile = function (path,

}

如果我尝试传递两个参数,我会得到
onSuccess不是一个函数
,所以我认为这不起作用。可以在javascipt中使用重载吗?

否。
Javascript不支持方法重载


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

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

有许多变通办法

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

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);
        }

    });
};
function foo() {
  var fns = {};
  fns[0] = function () {
    //no params
  };
  fns[1] = function () {
    //1 param
  };
  fns[2] = function () {
    //2 params
  };
  fns[arguments.length]();
}
如果只使用2个参数调用函数,
onSuccess
未定义

function (path, targetElement, onSuccess)
您可能希望了解如何处理事件回调,尽管可以使用重写函数


对于来自Java/C(重载世界)的程序员,学习JavaScript使用这种结构的方式(不推荐,这只是一个熟悉的示例):

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


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

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);
        }

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

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


@约翰:是的;将参数视为可选参数。可能最好将一个参数作为对象传递,包含不同数量的参数……建议的结构太愚蠢了。告诉他们停止做错事,学习javascript@Raynos,我从未推荐过这种结构。我想说明一点。这是荒谬的,因此被称为“计划不周的功能的症状”。我想我不够清楚,所以我会编辑它。
/** 
 * 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)