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中使用重载?
答案 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)