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)