我对jQuery非常熟悉。我正在尝试为自己的目的编写常用方法。以下是一个示例:
$.extend({
add : function(a, b)
{
return a + b;
},
add : function(a, b, c)
{
return a + b + c;
}
});
上述情况是否可行?我可以使用相同的扩展名称并传递不同的参数,例如方法重载吗?
答案 0 :(得分:15)
您正试图在某些语言方法重载中执行某些类型的调用。
JavaScript不支持它。
JavaScript非常通用,可让您以不同的方式实现此类功能。
对于您的特定示例,您的add
函数,我建议您使用arguments
对象创建一个接受任意数量参数的函数。
jQuery.extend(jQuery, {
add: function (/*arg1, arg2, ..., argN*/) {
var result = 0;
$.each(arguments, function () {
result += this;
});
return result;
}
});
然后你可以传递任意数量的参数:
alert(jQuery.add(1,2,3,4)); // shows 10
对于更复杂的方法重载,您可以检测传递的参数数量及其类型,例如:
function test () {
if (arguments.length == 2) { // if two arguments passed
if (typeof arguments[0] == 'string' && typeof arguments[1] == 'number') {
// the first argument is a string and the second a number
}
}
//...
}
检查以下文章,它包含一个非常有趣的技术,利用一些JavaScript语言功能,如闭包,函数应用程序等,来模仿方法重载:
答案 1 :(得分:3)
我认为只会使用您定义的第二个'add'属性覆盖第一个'add'属性。这在开发插件时很有用,并且想要为配置对象提供合理的默认值列表。
答案 2 :(得分:0)
如果向函数传递的参数少于定义为接受的参数,则JavaScript不会抛出错误。
您可以使用“arguments”在函数中使用变量参数设置,或者您可以像在第2个语句中使用3个参数一样定义函数,并只检查第3个参数是否未定义。如果没有提供参数,则将其设置为undefined,您可以简单地检查它(它与null不同),这可能比必须使用arguments对象更简单。