重载方法
问题描述:
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中使用重载?
答
有没有直接指定在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'
}
答
还有另外的路要走。不要在函数定义中给出任何参数,然后检查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)
也许它更好地传递一个参数作为一个对象,包含不同数量的参数... – Johan
推荐的结构简直是愚蠢的。告诉他们停止做错了,学习javascript – Raynos
@Raynos,我从来没有推荐过这种结构。我正在试图说明一点。这是荒谬的,因此“功能设计不良的症状”。我想我还不够清楚,所以我会编辑它。 – zzzzBov